Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 09:47 30.06.24 
Компютри и Интернет
   >> Програмисти
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | (покажи всички)
Тема Странности със <нови  
Автор naki (Power User)
Публикувано19.12.07 22:58



Имаме следния код (на C#2005):


double b;
double D;
b=1.7;
D=10;


if (b/D<0.17)
MessageBox.Show("Sux!");
else
MessageBox.Show("Correct!");

Резултата е "Sux!", а би трябвало да е =.
Тоест трябва да е = (равно), а то го дава, че е < (по-малко).
Същото е и ако под VB2005.
Под VC++ 2005 още не съм пробвал.

При промяна на кода на
(b/D)*100<17
работи правилно.
Някакви идеи защо така става?




Тема Re: Странности със <нови [re: naki]  
АвторPжeвckи (Нерегистриран)
Публикувано19.12.07 23:07



Щото плаващи пясъци/запетаи.
Туй стига ли като отговор?





Тема Re: Странности със < [re: naki]  
Авторtux (Нерегистриран)
Публикувано20.12.07 01:04



пробвай да напишеш 1.7 в двоична бройна система



Тема Re: Странности със <нови [re: naki]  
Авторzaphod (Нерегистриран)
Публикувано20.12.07 08:29



ехе, то ко беше да дава =, кода ми щеше да падне с поне 20%





Тема Re: Странности със <нови [re: naki]  
АвторГeнepaл Acaнcьop (Нерегистриран)
Публикувано20.12.07 10:08



Малък си, и си нов в областта на двоичната репрезентация на десетични числа с плаваща запетая.

1.7/10.0 = 0.16999999999999998



Тема Re: Странности със <нови [re: naki]  
Автор Colombino (работен)
Публикувано20.12.07 11:56



Вероятно си чувал, че floating point числа се сравняват за равенство с някакъв епсилон fabs//fabsf(a-b) < epsilon. Тва не е приумица.

10 може да ти изглежда кръгло число, ама е 2 * 5, а 5 никак не е кратно на 2 и в двоична бройна система деленето на 10 не е красиво. И понеже нито 7/10, нито 17/100 имат точно представяне в двоична бройна система се натрупват грешки. В случая литералното 0.17 е по-близо до истината от 1.7/10, което при интервенцията с деленето на 5 (1/10=(1/2)*1/5) е загубило някой значещ бит от мантисата и е станало по-малко.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_


Тема Re: Странности със <нови [re: Гeнepaл Acaнcьop]  
Автор naki (Power User)
Публикувано20.12.07 17:22



Мдаа, ето какво дава дебъгера:






Тема Re: Странности със <нови [re: naki]  
Автор пpocтo1чoвek (разпътник)
Публикувано20.12.07 18:29



Май, за да е точно представянето, то трябва да е безкрайно. Гадни са реалните числа, трудно е да гледаш дискретно на тях.

Те за това не се ползва == сравнение за плаващи аритметики.



Тема Re: Странности със <нови [re: пpocтo1чoвek]  
Автор Colombino (работен)
Публикувано20.12.07 21:55



Не бих нарекъл real/float типовете от компютърната аритметика реални числа. Те очевидно са рационални, макар наистина ролята им е да приближават реалните.
>> Май, за да е точно представянето, то трябва да е безкрайно.
Напротив: за да е точно представянето, то трябва да е крайно.

Ако вземеш 1/3 и го запишеш в 10-тична бройна система, то е доста криво число. В троична бройна система това е хубаво кръгло крано число и с него се смята много удобно.

Но е факт, че някои рационални числа имат кофти представяне в някои позиционни бройни системи. (пример: както вече казах 1/3 в десетична)

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_


Тема Re: Странности със <нови [re: Colombino]  
Автор пpocтo1чoвek (разпътник)
Публикувано20.12.07 22:33



Аз говоря за реални числа или поне за това си мисля, друг въпрос, че няма как човек да знае за какво си мисля.

Иначе верно тука за рационални числа става дума, но и в този контекст 1/3 десетично се представя безкрайно, което си прав е криво. Нищо дробно не е хубаво, хубави са целите. Например: цяла баничка е по-добре от 1/3 баничка.




Страници по тази тема: 1 | 2 | 3 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.