Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.04.2008, 22:49
burdich вне форума Посмотреть профиль Отправить личное сообщение для burdich Найти все сообщения от burdich
  № 1  
Ответить с цитированием
burdich

Регистрация: Jan 2008
Сообщений: 8
По умолчанию Почему выражение "n/2 == Math.round(n/2)" принимает значение "false"?

Почему выражение
Код:
n/2 == Math.round(n/2)
принимает значение "false", даже если "n" равно целым чётным числам (2,4,6...).

Пример кода наглядно это демонстрирующего:
Код:
var n:Number=0;
onEnterFrame = function () {
	trace ("a="+n/2);
	trace ("b="+Math.round(n/2));
	trace ("c="+(n/2 == Math.round(n/2)));
	n+=0.2	
}

Старый 26.04.2008, 23:20
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
У флеша есть погрешность при сложении дробных чисел не кратных (0.5, 0.25, 0.125, 0.0625 и тд).
Поэтому со временем накапливается ошибка при сложении.
И реально, при многократном вызове n+=0.2, вместо 4 оказывается число 4.000000000000000888178419700125

Вторая проблема заключается в том, что при таком малом значении дробной части, в трейс выводится только целая часть, что может вызывать кучу проблем и вопросов, вроде сраниваем
Код:
trace (n +" == 4 -->" + (n== 4))
//// 4  == 4 --> false
а получается, что 4 не равно 4.
Увидеть данную проблему можно так:
Код:
trace (n - 4)
//// 8.88178419700125e-16
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.04.2008, 13:31
burdich вне форума Посмотреть профиль Отправить личное сообщение для burdich Найти все сообщения от burdich
  № 3  
Ответить с цитированием
burdich

Регистрация: Jan 2008
Сообщений: 8
Спасибо огромное за адекватный и развёрнутый ответ!

В принципе я что то подобное подозревал, а есть ли тогда еще какой способ проверки числа на кратность другому, любому числу. Допустим у меня есть переменная-счетчик "x += n" (где n - любое число), и мне нужно отслеживать кратность "x" чилсу "y".

Пример:
Код:
var x:Number = 0;
onEnterFrame = function () {
   if (x кратно 7) {
       trace (true);
   }
   x += 0.1
}
Заранее спасибо.


Последний раз редактировалось burdich; 27.04.2008 в 13:43.
Старый 27.04.2008, 14:11
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 4  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
Код:
if(Math.abs(a-b)< 0,0000001) trace('равно')
__________________
: M F N W :


Последний раз редактировалось Fernando Costa; 27.04.2008 в 14:13.
Старый 27.04.2008, 16:37
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Если числа целые, то
Код:
n = 4;
trace (n % 2 == 0);
//// true
n = 5;
trace (n % 2 == 0);
//// false
n = 6;
//// true
trace (n % 3 == 0);
n = 7;
//// false (n % 3 == 0);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.04.2008, 13:44
burdich вне форума Посмотреть профиль Отправить личное сообщение для burdich Найти все сообщения от burdich
  № 6  
Ответить с цитированием
burdich

Регистрация: Jan 2008
Сообщений: 8
Точно, смотреть по остатку. Спасибо еще раз, я думаю это пригодиться не только мне.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:15.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.