|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Бред какой-то!!! 18==18 //output :: false
Всем извесно, что квадрат гипотинузы равен сумме квадратов катитов (ещё в школе учили).
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
3*3+3*3 = 9+9 = 18. Квадратный корень из 18 ограничен по числу знаков. В AS3 точность выше и мы на выходе получаем 17.999999999999996, а не 18. Т.е. нужно округлять c*c до целого.
|
|
|||||
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
т.к. при
вы видете 18 а это именно
Последний раз редактировалось motor4ik; 24.04.2007 в 13:03. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Видимо, во внутреннем представлении все же идет на разделение операций с плавающей запятой и целочисленных.
|
|
|||||
a = 3; b = 3; c = Math.sqrt((a * a) + (b * b)); trace(c * c + " = kvadrat gipotinuzy"); trace((a * a) + (b * b) + " = summa kvadratov katitov"); trace(String(c * c) == String((a * a) + (b * b))); При таком раскладе к вычислению добавляется ещё строчка Или это уже бред? Math.round - не гарантирует идеальной точности вычислений, а хотелось бы к этой идеальности приблизиться Последний раз редактировалось etc; 24.04.2007 в 13:31. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Пример:
a = 4.24264068711928*4.24264068711928; b = 18; c = 18; trace(a==b); // false trace(b==c); // true В реальности: constants 'a', 'b', 'c' push 'a', 18.00 setVariable push 'b', 18 setVariable push 'c', 18 setVariable push 'a' getVariable push 'b' getVariable equals trace push 'b' getVariable push 'c' getVariable equals trace end В байт коде: push 'a', 18.00 это: А push 'b', 18 это: И, наконец, push 'c', 18 это: Как видно, последние два push имеют тип 07h, т.е. integer, целое число. А в первом случае 06h (видимо, double 64bit). В общем, особо не разбирался да и лень. Идеальной точности не добиться. Особенно при работе с корнями. Последний раз редактировалось etc; 24.04.2007 в 13:44. |
|
|||||
__etc, супер, всё, прям, популярнинько разложил! Спасибо!
А я чего-то сам на байт-код не додумался взглянуть... |
|
|||||
Modus ponens
|
Цитата:
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 01:01. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|