סוגי משתנים מספריים

KKnDoIt

New member
סוגי משתנים מספריים

כקבוצות של מספרים: שלום לכולם, בד"כ מקובל בספרות המחשבים הפופולרית לתאר סוגי משתנים מספריים ע"פ טווח המספרים שהם יכולים לייצג. לדוגמה, float מייצג מספרי נקודה צפה בדיוק כזה וכזה, בגודל מכזה וכזה עד כזה וכזה (אני לא זוכר את הערכים). double מייצג מספרי נקודה צפה בדיוק כזה וכזה, וכ'. אני חושב שנכון יותר לתאר אותם כקבוצות (סופיות, כמובן) של מספרים, במקום כמייצגים טווחים. אז אפשר יהיה לראות בקלות את היחסים בין סוגי מספרים שונים באמצעות הייחסים בין הקבוצות: (הקבוצה) double מכילה ממש את float, שמכילה ממש את long (?), שמכילה ממש את int, וכ'. כך גם יהיה קל להבין יותר את ה- Casting האוטומטי שמבצע הקומפיילר כאשר הוא מחשב ביטוי המכיל משתנים מסוגים שונים: אם מבוצעת פעולה מהצורה: a * b, כאשר * הוא אופרטור כלשהו, והטיפוסים הם A ו- B בהתאמה, אז אם A מוכל ממש ב- B, הוא יומר למשתנה מטיפוס B. מה קורה כאשר אין הכלה באף כיוון אני לא יודע. אני גם מאמין שזה נכון לעוד שפות מלבד C ו- C++. לדוגמה, אם פעולה מכילה מחרוזת ומספר, והאופרטור מוגדר עבור שתי הקבוצות (שני סוגי המשתנים), המספר יומר למחרוזת, כי קבוצת המחרוזות מכילה ממש את קבוצת המספרים. זה משהו שחשבתי עליו עכשיו, אני אשמח לשמוע מה דעתכם.
 

annefan

New member
שתי בעיות

א. long לא בהכרח מכיל ממש את int. יתכן, וככה זה כיום, long זהה ל-int (4 בתים). ב. הבעיה הגדולה יותר היא במעבר בין מספר למחרוזת. יש משמעות ל-cast בעולם המחשבים. בתורה הקבוצות אין שום משמעות מספרית למחרוזת שמציגה על המסך מספר. זה עשוי להיות קשור לתורת המידע אבל לא ברור לי איך זה יתרום להבנת cast.
 

KKnDoIt

New member
-->

לגבי א: לא חשוב. זו רק דוגמה. לגבי ב': אני יכול להסביר, אבל גם במה שאתה אומר יש משהו, כך שאני ארד מזה. בכל אופן, נכון יותר להציג טיפוס כקבוצה של מספרים (או בצורה כללית יותר: עצמים), ומשתנה מסוג מסויים הוא משתנה שמכיל בדיוק איבר אחד מתוך קבוצה זו. לדעתי זה מדויק יותר (דבר חשוב מאוד במדעי המחשב), וגם ברור יותר.
 

annefan

New member
אבל עכשיו אני לא מבין מה הרווח

לגבי טיפוסים, כל שפה יכולה להחליט בעצמה איך נקבעים הטיפוסים של ביטויים. לדוגמא, מה הטיפוס של קבוע חיובי שלם? short, int, unsigned int? מה הטיפוס של 1/2? int, float, double? לא תמיד תהיה תאימות בין בגישה המתמטית לשו של כותבי הקומפיילרים\ABI\OS וכד'. מתמטיקאים חיים בעולם שאין בו עלויות פיתוח, ומתכנתים צריכים להתפשר על זמני קומפילציה, code parsing, קוד ישן וכד'.
 

KKnDoIt

New member
רגע, רגע, אני חושב שלא הייתי מובן:

ניסיתי להגיד איך אפשר _לתאר_ טיפוסי משתנים, איך אפשר לתאר את המצב הקיים. זו צורה לתאר דברים, להסביר אותם (את מה שכבר קיים), ולא שום דבר מעבר לזה. אם אתה אומר ש- float מוכלת ממש ב- double, מייד ברור שתמיד אפשר לבצע Casting מ- float ל- double, אבל לא תמיד את ההיפך. זו צורה להסביר מצב קיים, לא להגדיר דברים חדשים.
 
למעלה