Zashto (float)5 - (float)5.9 = -0,9000001

12 отговора 668 прегледа
#1

Zashto (float)5 - (float)5.9 = -0,9000001

Zashto :

(float)5 - (float)5.9 = -0,9000001 ?!?!?

(c#)

Отговор
в отговор на FullScream #2

Re: Zashto (float)5 - (float)5.9 = -0,9000001

щот като се превръща в 2-чна система и се получава грешка

по-конкретно 5.9 няма точно представяне с FP...

Сигнатура!

Редактирано от Questor на

Отговор
в отговор на FullScream #3

Re: Zashto (float)5 - (float)5.9 = -0,9000001

decimal result = (decimal)5 - (decimal)5.9;
?

Отговор
в отговор на FullScream #4

Re: Zashto (float)5 - (float)5.9 = -0,9000001

Прочети тук:
[линк]
Много хубаво е обяснено. Даже прокалено хубаво.

Боже колко мъка има на този свят Боже!
Отговор
в отговор на FullScream #5

Re: Zashto (float)5 - (float)5.9 = -0,9000001

Манете ги тия дроби миризливи бре. Те са коренът на всяко зло.



Отговор
в отговор на FullScream #6

Re: Zashto (float)5 - (float)5.9 = -0,9000001

ако ми трябват числа с до 4 знака след запетаята, в Делфи използвам Currency. За такива числа съвсем спокойно могат да се използват интеджерчета с дръпнати няколко знака.

За този проблем разбрах от една Excel-ска таблица, когато при рекапитулацияута се почучи неравнение, а като видях резултата...0.000000003454 нещо такова... И от тогава използвам Currency.

Отговор
в отговор на Pekoнcтpykтop #7

Re: Zashto (float)5 - (float)5.9 = -0,9000001

mi tyj de, ne trqbwa da se izpolzwat neshta, koito ne se znaqt, pyk i sa mnogo slojni, a i koj mu se uchi izobshto!?!? az toq post, naprimer, sys logaritmichnata linijka go pusnah...... ama shte minawam na smetalo de, che sa mnogo slojni tiq pushtini....

Отговор
в отговор на plias #8

Re: Zashto (float)5 - (float)5.9 = -0,9000001

Като стана дума за учене - ми това за double/float числата се учи и във ФМИ и във ТУ... - не е да кажеш някакво top-secret. така че не знам дали толкова ни е криво УбразУванието или УбразУващите се....

Сигнатура!
Отговор
в отговор на FullScream #10

Защото...

Типът float гарантира 6 десетични цифри точност.
Т.е. имаш гаранция за операцията
5.00 000X - 0.900 000
Резултатът също е старшите 6 цифри от предната сметка.
За double се гарантират 15 цифри. Демек там няма как да получиш грешка в цялата част. Но при float може, затова като подаваш float за int дава warning.
Ако изкараш резултата от същата сметка в double с повече от 15 значещи цифри пак ще има разлика.
Изобщо числата които имат добро представяне в една бройна система понякога са доста къдрави в друга и пресмятането им в нея няма как да не води до грешки. Също като числата 1/3, 2/3 в десетична систма, които в троична изглеждат съвсем прилично.


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на plias #11

Re: Zashto (float)5 - (float)5.9 = -0,9000001

Напротив, смятането с използване на целочислени типове с читав контрол на точността е по-сложно от смятането с float-и & double-и. Та за това са и измислени.



Отговор
в отговор на zaphod #12

Re: не бяха ли евреите?

Майната им на евреите и на световния империализъм. Тъкмо почна по ОРТ филмче за Хрущев и неговата "Кузькина мать".



Отговор
в отговор на Questor #13

Re: Zashto (float)5 - (float)5.9 = -0,9000001

Mah baamu !!

Shto reshi che vsichki tuk za BOGOPOMAZANI of svetlata sila na FMI ili TU ...az sam prosto lekar (ako predpochitash - prost lekar ) ....za tova koe mi e krivo i koe ne ...znayat samo nyakolko gadjeta i jena mi ;) !



Na ostanalite ...ISKRENO mersi za otgovorite :)

Отговор