31-01-2006, 14:01
|
|
|
|
חבר מתאריך: 20.06.03
הודעות: 5,616
|
|
מה הבעיה עם הבדיקה שלי?
אם לא הבנת, הנה העיקרון שעומד מאחור:
עבור משתנה מסוג float בצע חיסור של החלק השלם שלו מעצמו, דוגמה:
f=5.02
מכאן אנו מבצעים:
קוד:
5.02 - (int)5.02 == 5.02 - 5
התוצאה היא 0.2 כלומר לא!! 0, כלומר על פי כללי התחביר של C (או ++C) מדובר בערך בוליאני true.
עבור f=8.0 נבצע:
קוד:
8.0 - (int)8.0 == 8.0 - 8
התוצאה היא 0, או false בתנאים הבוליאנים בתחביר C.
על פי השורה שכתבתי:
קוד:
return (f-(int)f) ? 0 : 1;
אם התוצאה היא 0 (כמו בדוגמה 2, כלומר מספר שלם), אזי יוחזר 1.
אם התוצאה שונה מ-0 (דוגמה 1, לא מספר שלם), כלומר ערך בוליאני true, יוחזר הערך 0.
|