![]() |
Бред какой-то!!! 18==18 //output :: false
Всем извесно, что квадрат гипотинузы равен сумме квадратов катитов (ещё в школе учили:)).
Код:
a = 3; |
3*3+3*3 = 9+9 = 18. Квадратный корень из 18 ограничен по числу знаков. В AS3 точность выше и мы на выходе получаем 17.999999999999996, а не 18. Т.е. нужно округлять c*c до целого.
|
Код:
trace(String(c*c) == String((a*a)+(b*b)));Код:
trace (c*c)Код:
String(c*c) |
Видимо, во внутреннем представлении все же идет на разделение операций с плавающей запятой и целочисленных.
|
trace(Math.round(c*c) == Math.round((a*a)+(b*b))); // true
|
Код:
a = 3;Код:
trace(Number(c * c) == Number((a * a) + (b * b)));При таком раскладе к вычислению добавляется ещё строчка :( Код:
c = Math.sqrt(Number(((a * a) + (b * b)).toString()));Math.round - не гарантирует идеальной точности вычислений, а хотелось бы к этой идеальности приблизиться:) |
Пример:
Код:
a = 4.24264068711928*4.24264068711928;Код:
a = 18;Код:
constants 'a', 'b', 'c'В байт коде: push 'a', 18.00 это: Код:
960B00080006FFFF3140F4FFFFFFКод:
96070008010712000000Код:
96070008020712000000Идеальной точности не добиться. Особенно при работе с корнями. |
__etc, супер, всё, прям, популярнинько разложил! Спасибо!
А я чего-то сам на байт-код не додумался взглянуть... |
Cамый простой пример:
Код:
a = 3; |
Цитата:
|
| Часовой пояс GMT +4, время: 22:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.