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

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

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

Регистрация: Mar 2009
Сообщений: 11
По умолчанию правильные вычисления

можно ли заставить actionscript вычислять правильно?

Код AS3:
var _test:Number  = 1;
 
stage.addEventListener(Event.ENTER_FRAME, test);
 
function test(e:Event):void
{
trace(_test -= 0.1);
}
в аутпуте выдаёт

Код:
0.9
0.8
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014

Старый 07.06.2009, 22:10
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 2  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
Точно такой же вопрос был недавно.

К чему такая точность? Вообще, не вижу приложений, кроме математических, где соблюдение такой точности имеет значение.

Если нужно - можете использовать такую альтернативу:
Цитата:
_test -= 1
trace(_test / 10);

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Код AS3:
var _test:Number  = 10;
 
stage.addEventListener (Event.ENTER_FRAME, test);
 
function test (e:Event):void {
	trace ((_test -= 1)/10);
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 08.06.2009, 10:13
wizardjedi вне форума Посмотреть профиль Отправить личное сообщение для wizardjedi Найти все сообщения от wizardjedi
  № 4  
Ответить с цитированием
wizardjedi
 
Аватар для wizardjedi

Регистрация: May 2009
Сообщений: 10
Заставить вычислять "правильно" фактически не возможно, так как все "числа с запятой" представляются в приближённом виде. Происходит накопление ошибки, что вы и продемонстрировали.

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

Например так,
if (Math.abs(a-7)<0.00001){
...
}

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

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

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


 


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


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