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

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

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

Регистрация: Jun 2003
Адрес: Minsk
Сообщений: 58
Отправить сообщение для AlexMatveev с помощью ICQ
По умолчанию Интересный вопрос (цикл for)

Делаем цикл:

for (var i = 8; i<=10; i += 0.1) {
trace(i);
}

На выходе:

8
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
9
9.1
9.2
9.3
9.4
9.49999999999999
9.59999999999999
9.69999999999999
9.79999999999999
9.89999999999999
9.99999999999999

ПОЧЕМУ???
Я всегда думал что 9.4+0.1=9.5, а не 9.49999999999999

Старый 11.06.2004, 15:32
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 2  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
да, есть такие глюки в мат части :(

насколько я понимаю, с этим никак не побороться..
надо учитывать что это есть

Старый 11.06.2004, 15:42
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Код:
a = 4;
// a = 5;
// a = 6;
// a = 7;
// a = 8;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
а если начинать считать с a = 3 или c a = 9 - этого косяка уже нет

Старый 12.06.2004, 14:15
Dindin вне форума Посмотреть профиль Отправить личное сообщение для Dindin Посетить домашнюю страницу Dindin Найти все сообщения от Dindin
  № 4  
Ответить с цитированием
Dindin
 
Аватар для Dindin

Регистрация: Feb 2004
Адрес: на колокольне Любит: плеваться
Сообщений: 1,769
Отправить сообщение для Dindin с помощью ICQ
А вот так - еще веселее
Код:
for (var i = 8; i<=10; i += 1e-3) {
trace(i);
}
__________________
судью - на мыло, из игроков - вить веревки.

Старый 13.06.2004, 16:37
Jlekc вне форума Посмотреть профиль Отправить личное сообщение для Jlekc Найти все сообщения от Jlekc
  № 5  
Ответить с цитированием
Jlekc
 
Аватар для Jlekc

Регистрация: Dec 2003
Адрес: Leopolis
Сообщений: 398
Отправить сообщение для Jlekc с помощью ICQ
да ладно, чо вы обижаете флеш, будто это его баги
протрейсети это в других апликухах, это баг процесора, и он вылазит под любым языком

Старый 13.06.2004, 18:02
  № 6  
Ответить с цитированием
Stevee
Guest

Сообщений: n/a
я помню что это как то объясняется тока не помню как
давно слышал

Старый 14.06.2004, 23:47
NeZnayKa вне форума Посмотреть профиль Отправить личное сообщение для NeZnayKa Найти все сообщения от NeZnayKa
  № 7  
Ответить с цитированием
NeZnayKa
 
Аватар для NeZnayKa

Регистрация: Jul 2003
Адрес: Istanbul
Сообщений: 252
в калькуляторах точно так же
корень 0.99999999..... ровняется себе

или я что то не понял ?
__________________
:: tired to live ::

Старый 15.06.2004, 11:45
kostyanK вне форума Посмотреть профиль Отправить личное сообщение для kostyanK Посетить домашнюю страницу kostyanK Найти все сообщения от kostyanK
  № 8  
Ответить с цитированием
kostyanK

Регистрация: Dec 2003
Сообщений: 36
вся фишка в том что проц все операции производит в двоичной системе, а дробное число точно перевести в двоичную систему нельзя - можно лишь с заданной точностью.

Например 0.1 (с точностью десять разрядов)= 0.0001100110

а теперь если перевести обратно то 0.0001100110 = 0.99609375

Старый 15.06.2004, 12:14
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 9  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
это хорошее и логичное объяснение.

только это не объясняет почему в плеере этот глюк вылезает настолько фрагментарно :)
Код:
for (var i=-6; i<10; i+=.1) {
	trace(i);
}
проверьте, к примеру, то же самое в джаваскрипте

Старый 16.06.2004, 12:11
AlexMatveev вне форума Посмотреть профиль Отправить личное сообщение для AlexMatveev Посетить домашнюю страницу AlexMatveev Найти все сообщения от AlexMatveev
  № 10  
Ответить с цитированием
AlexMatveev

Регистрация: Jun 2003
Адрес: Minsk
Сообщений: 58
Отправить сообщение для AlexMatveev с помощью ICQ
Интересно, что думает по этому поводу Macromedia ???

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

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

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


 


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


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