ABA


"חידה נחמדה :)"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #6795 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 6795
Cd-Writer

   03:11   20.08.03   
אל הפורום  
  חידה נחמדה :)  
 
   ענו נכון\לא נכון ונמקו:
אם X אינו שווה לאפס, X*X אינו שווה לאפס (משתנה מסוג DOUBLE)


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשובה johnyY 20.08.03 04:36 1
     נכון ...; eliran33 20.08.03 11:48 2
         העניין הוא שבניגוד למתמטיקה טהורה liranr 20.08.03 13:02 3
             השאלה היא איך אתה מתיחס לאפס yoash 21.08.03 01:24 4
                 בנאדם? כנראה. מתמטיקאי? כנראה שלא liranr 21.08.03 18:18 5
                 זה לא חשוב איך אתה מגדיר אפס dryice 21.08.03 22:18 6
  לא נכון zvikav  27.08.03 09:07 7
     הטווח של double, קצת יותר בדיוק: dryice 27.08.03 17:16 8
  בטח שלא !!! Dudenland 27.08.03 22:20 9

       
johnyY

   04:36   20.08.03   
אל הפורום  
  1. תשובה  
בתגובה להודעה מספר 0
 
   X*X
שווה
X בריבוע
אז זה נכון
זה לא שווה ל 0


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
eliran33

   11:48   20.08.03   
אל הפורום  
  2. נכון ...;  
בתגובה להודעה מספר 1
 
   ג'וני מעליי צודק ... לא הבנתי מה הקטע עם המשתנה מסוג Double ...
מתימתיקה זה מתימתיקה זה לא קשור לסוג המשתנה ...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   13:02   20.08.03   
אל הפורום  
  3. העניין הוא שבניגוד למתמטיקה טהורה  
בתגובה להודעה מספר 2
 
   למשתנים יש מגבלות יצוג מסויימות.
למשל הקטע:

#include <stdio.h>

int main()
{
double d = 1e-250,e=d*d;
printf("%d\n",d==0);
printf("%d\n",e==0);

return 0;
}


יתן תוצאה מפתיעה למדי...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
yoash

   01:24   21.08.03   
אל הפורום  
  4. השאלה היא איך אתה מתיחס לאפס  
בתגובה להודעה מספר 3
 
   כי מה שעשיתה שם עם הסתכלתי נכון זה לקחת מספר מאוד מאוד מאוד מאוד מאוד (בחזרת 250 מאוד) קטן והעלת אותו בריבוע גם במתמטיקה הרגילה לפכות בתחום הנורמלי שלה זה יצא

e^-250 ^ 2 = e^-500 -> 0

מה שאני מנסה להגיד שזה לא אפס אלה שואף לאפס ובגלל שבמחשב מדובר על מספר סופי אז הוא מעגל את זה לאפס.

נ.ב
גם בן אדם היה מתיחס לזה כאפס.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   18:18   21.08.03   
אל הפורום  
  5. בנאדם? כנראה. מתמטיקאי? כנראה שלא  
בתגובה להודעה מספר 4
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   22:18   21.08.03   
אל הפורום  
  6. זה לא חשוב איך אתה מגדיר אפס  
בתגובה להודעה מספר 4
 
   ידוע, במדעי המחשב, שכאשר עובדים עם משתני נקודה צפה,
אף פעם לא משווים שני מספרים, אלה בודקים אם ההפרש ביניהם
קטן מאיזה סף. כנ"ל לגביי בדיקה האם משהוא שווה לאפס.
אבל לא משנה מה זה הסף הזה(כל עוד הוא קטן מ1) אם אני
לוקח מספר שגדול במעט מהסף ומעלה אותו בריבוע אני אקבל
משהוא קטן מהסף.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
zvikav 
חבר מתאריך 1.8.02
7610 הודעות
   09:07   27.08.03   
אל הפורום  
  7. לא נכון  
בתגובה להודעה מספר 0
 
   הטווח של double הוא 1.7E +/- 308 כלומר אם נגדיר משתנה בעל ערך קטן מאוד שריבועו מחוץ לטווח נקבל אפס. ערך כזה לדוגמא הוא: 1e-200.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   17:16   27.08.03   
אל הפורום  
  8. הטווח של double, קצת יותר בדיוק:  
בתגובה להודעה מספר 7
 
   ערכתי לאחרונה בתאריך 27.08.03 בשעה 17:24 בברכה, dryice
 
כשמנסים להמיר לעשרוני שום דבר טוב לא יוצא, הטווח של double
הוא ראשית לא סימטרי. האקספוננט הבינארי הוא מ -1023 עד ל1024
(11 ביט, עם bias של 1023)
המנטיסה המקסימלית היא למעשה: כמעט 2,

1+(2^52-1)/(2^52)

הערך החיובי הקטן ביותר מחושב בצורה מיוחדת, שכן כאשר האקספוננט
הוא 0 ועם הbias הוא -1023 אז לא שמים 1 מוביל למנטיסה,
ואנו מקבלים מנטיסה מינמלית של
a 2^-52
את זה אנו מכפילים את זה ב 2^-1022 ולא 1023 כפי שהיה מחושב
מהbias הרגיל.
ומקבלים בסופו של דבר ערך חיובי מינימלי של
a 2^-1022*2^-52=2^-1074
ועם אתה מתעקש לשים את זה בעשרוני אז זה יצא:
4.9406564584124654e-324


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   22:20   27.08.03   
אל הפורום  
  9. בטח שלא !!!  
בתגובה להודעה מספר 0
 
   מעבר למגבלת ה"נקודה הצפה", ישנה המגבלה של כל משתנה...

כידוע, משתנה מסוג 64bits) signed double), שערכו 64^2, יהיה שווה ל-0- (מינוס 0), או שערכו 32^2, יהיה שווה ל-0.

משתנה unsigned double, שגודלו 64^2, יהיה שווה ל-0.

לכן, עבור הערך 32^2, X*X יתן תוצאה של 0.
במקרה של signed, גם 16^2 יתן תוצאה של 0.

כמו-כן, בכל מקרה, עבור כל a (שלם), 32^2*a יתן תוצאה של 0.

כל זאת, כמובן, בתנאי שאתה מתייחס למשוואה X*X כפתרון שמוצב ל-X (כגון mul x), או כפתרון שמוצב למשתנה אחר מאותו סוג (double).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net