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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

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

Регистрация: Sep 2000
Адрес: SPb
Сообщений: 3,374
Отправить сообщение для lexass с помощью ICQ
По умолчанию Веселый вопросец???:)

Меня 0чень интересует ответ:
Код:
b=100
a=100.70
x1=a-b
a=100.07
x2=a-b
Чему равно х1 и х2
ЗЫ
С математикой у меня плохо
__________________
Старый плюс лучше новых двух.
I like RTFM
попросил - подожди - обработай
Chr(255) == '\xFF' - это про "я"
lexass


Старый 24.12.2001, 16:44
lexass вне форума Посмотреть профиль Отправить личное сообщение для lexass Посетить домашнюю страницу lexass Найти все сообщения от lexass
  № 2  
lexass
 
Аватар для lexass

Регистрация: Sep 2000
Адрес: SPb
Сообщений: 3,374
Отправить сообщение для lexass с помощью ICQ
Похоже у всех тоже плохо с математикой
__________________
Старый плюс лучше новых двух.
I like RTFM
попросил - подожди - обработай
Chr(255) == '\xFF' - это про "я"
lexass


Старый 24.12.2001, 16:53
RFMitrio вне форума Посмотреть профиль Отправить личное сообщение для RFMitrio Посетить домашнюю страницу RFMitrio Найти все сообщения от RFMitrio
  № 3  
RFMitrio
 
Аватар для RFMitrio

Регистрация: Aug 2001
Адрес: город на Неве
Сообщений: 1,908
Отправить сообщение для RFMitrio с помощью ICQ
Где-то тута подвох чтоль?
По идее
x1=0.7
x2=0.07, но помню у меня были всякие веселые вещи типа строка в СИ
i=0;
дебаггером Си проверям - i принимает произвольное значение от 0 до NAN. Глюки всякие возможны
__________________
suum quique

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

Регистрация: Sep 2000
Адрес: SPb
Сообщений: 3,374
Отправить сообщение для lexass с помощью ICQ
Гы%)
Я в уме тоже эти цыфры получаю (всегда)
А вот флеш супер точный, вычислительный прибор
Со мной несоглсен (сто байт ему в дышло)
по его мнению:
x1 = 0.700000000000003
x2 = 0.0699999999999932
ЗЫ
У меня на самом деле проблем не каких...
ЗЗЫ
А вдруг кому-нить понадобиться
__________________
Старый плюс лучше новых двух.
I like RTFM
попросил - подожди - обработай
Chr(255) == '\xFF' - это про "я"
lexass


Старый 24.12.2001, 20:22
Barmaglot вне форума Посмотреть профиль Отправить личное сообщение для Barmaglot Найти все сообщения от Barmaglot
  № 5  
Barmaglot
 
Аватар для Barmaglot

Регистрация: Aug 2001
Адрес: Moscow
Сообщений: 213
Отправить сообщение для Barmaglot с помощью ICQ
Операции над числами с плавающей точкой всегда вычисляются округленно. Точность зависит от представления числа в компьютере. Для двойной точности (8-ми байтовые числа с плавающей запятой - double) точночть составляет 15-16 знаков после запятой. Поэтому с компьютерной точки зрения флэш выдает совершенно правильный ответ. Все эти ошибки округления появляются не во флэше а в самам процессоре.

Старый 24.12.2001, 20:29
[subway]design вне форума Посмотреть профиль Отправить личное сообщение для [subway]design Посетить домашнюю страницу [subway]design Найти все сообщения от [subway]design
  № 6  
[subway]design
 
Аватар для [subway]design

Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
дело в том, что Флеш трансформирует числа из 10ичной в 2ичную систему счисления для своих операций, а потом тебе отдает обратно переделанное число (2 -> 10) при этих операциях неизбежны погрешности и округления, например 0.3 в 2ичной системе чуть ли не иррациональное число, также как 1/3 в десятичной - 0.33333333333333333...33

PS: А никто и не обещал, что Флеш - точный прибор.
__________________
subway.net.ru

Старый 24.12.2001, 20:49
Barmaglot вне форума Посмотреть профиль Отправить личное сообщение для Barmaglot Найти все сообщения от Barmaglot
  № 7  
Barmaglot
 
Аватар для Barmaglot

Регистрация: Aug 2001
Адрес: Moscow
Сообщений: 213
Отправить сообщение для Barmaglot с помощью ICQ
Флэш зесь ни при чем. И иррациональные числа здесь тоже ни при чем. Вы выполните этот примерчик в Delphi, C++ или что вам ближе, у вас будет то же самое. Это ошибки округления при операциях с плавающей точкой в процессоре.
Цитата:
0.3 в 2ичной системе чуть ли не иррациональное число, также как 1/3 в десятичной - 0.33333333333333333...33

Из десятичной в двоичную и обратно числа переводятся БЕЗ потери точности. Не надо путать двоичную систему (или n-ичную) c обычными дробями - это большая разница. К тому-же с чего ты взял, что числа во флэше представлены в 10-ном виде? Они там вполне двоичные.

Старый 24.12.2001, 20:51
Vaicartana вне форума Посмотреть профиль Отправить личное сообщение для Vaicartana Найти все сообщения от Vaicartana
  № 8  
Vaicartana
 
Аватар для Vaicartana

Регистрация: Jun 2001
Адрес: Блага
Сообщений: 483
Отправить сообщение для Vaicartana с помощью ICQ
Это еще чё! Я вот такой глюк в 1С откапал, хоть плачь хоть смейся:

Сумма=34317.93;
Сум=Сумма*(0.2/(0.2+1));
Сообщить(Сум);
Сообщить(Окр(Сум,2,1));

выдает
5719.655
и 5719.65 //округление


а теперь немного изменим код

Сумма=34317.93;
Сум=Сумма*0.2/(0.2+1);
^ ^ убраали скобки.
Сообщить(Сум);
Сообщить(Окр(Сум,2,1));
выдает
5719.655
и 5719.66

вот так мы и уклоняемся от налогов 8)))))
__________________
Трудно быть одному и ждать рассвет, как спасенье....

Старый 24.12.2001, 21:03
Barmaglot вне форума Посмотреть профиль Отправить личное сообщение для Barmaglot Найти все сообщения от Barmaglot
  № 9  
Barmaglot
 
Аватар для Barmaglot

Регистрация: Aug 2001
Адрес: Moscow
Сообщений: 213
Отправить сообщение для Barmaglot с помощью ICQ
В первом случае
компьютер сначала делит 0.2 на 1.2, а потом умножает ее на Cумму, во втором сначала умножает Сумму на 0.2, а затем результат делит на 1.2. Если вычислять разными путями, то ошибки округленя будут разными.

Вот вам примерчик:

e=1e-20;
c=1;
c+=e; // с останется равной 1, т.к. 1.00000000000000000001
находится за пределами точности (обычно для дробных чисел используются числа double, а это - 15-16 значащих цифр).
d=e/(c-1); // Получится INF, а должно 1

Если вы работаете с числами с плавающей точкой, то не мешает знать все эти тонкости, чтоб не напороться на грабли.
Это не ошибка - это принципиальная особенность работы компьютера с дробными числами.

Старый 24.12.2001, 22:23
Vaicartana вне форума Посмотреть профиль Отправить личное сообщение для Vaicartana Найти все сообщения от Vaicartana
  № 10  
Vaicartana
 
Аватар для Vaicartana

Регистрация: Jun 2001
Адрес: Блага
Сообщений: 483
Отправить сообщение для Vaicartana с помощью ICQ
угу, знакомый прикол из С++

в моем примере весь глюк в представлении сопром числа вида 0.333(3) т.е. периодической дроби.
глюк воникает,если число выглядит как 0.5549999999999999999999
что при округлении даст 0.55, хотя на самом деле это число выглядит как 0.555, дающая при округлении 0.56
__________________
Трудно быть одному и ждать рассвет, как спасенье....

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

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

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


 


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


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