Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Web-программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 09.01.2004, 08:54   [включить плавающее окно]   #1
LarrySh
Начинающий
Автор темы
 
Регистрация: 24.10.2003
О точности вычислений

Это глюк или фича?
(Запусти след. код).

<html>
<body>
<p><p>
Сколько будет 25.4x3? Думаете, 76.2? Ошибаетесь!<br>
Нажмите кнопку и проверьте свои знания арифметики:<br>
<form name="test">
<input type="submit" value="Calculate" onClick="alert('result: \r25.4x2='+25.4*2+'\r25.4x3='+25.4*3+'\r25.4x4='+25.4*4+'\r25.4x5='+25.4*5+'\r25.4x6='+25. 4*6+'\r25.4x7='+25.4*7+'\r25.4x8='+25.4*8+'\r25.4x9='+25.4*9);">
</form>
</body>
</html>
__________________
Д-р гонорис кауза Рем Квадрига
LarrySh вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 09.01.2004, 12:42   [включить плавающее окно]   #2
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
Ты про 76,199999999999? Это не глюк, это погрешность вычисления. Все дело в том, что компьютер хранит (и, соответственно, обрабатывает) числа не в виде "76,2", а в двоичном представлении (10011101... - что-то в этом роде). 76,2 нельзя точно представить в двоичном виде, поэтому и получается 76,199999999999. Это обычное явление, для борьбы с ним используется округление чисел.
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 09.01.2004, 12:57   [включить плавающее окно]   #3
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Вообще это вычиления с фиксированной (или плавающей) точкой, комп все считает без проблем.
Похоже, что это погрешность IE, потому что с использованием любого языка программирования такого не будет.
Кстати подобная проблема была на галимых ламповых калькуляторах
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Непрочитано 09.01.2004, 17:23   [включить плавающее окно]   #4
Prezident
Мужской Умудрённый
 
Аватар для Prezident
 
Регистрация: 29.10.2003
Адрес: Томск
Всегда можно использовать округление, если делать на PHP, или любом другом языке програмирования, то можно сделать проверку на число идуших подряд чисел и сделать округлдение там. Работать будет точно как Швецарские часы
__________________
Россия победит!
Prezident вне форума  
Ответить с цитированием
Непрочитано 09.01.2004, 17:31   [включить плавающее окно]   #5
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Sanya
А пишешь, что программер ....
Цитата
76,2 нельзя точно представить в двоичном виде, поэтому и получается 76,199999999999
http://www.csu.ac.ru/~yan/informat/t...les/nflp_1.htm
Сходи посмотри
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Непрочитано 09.01.2004, 17:40   [включить плавающее окно]   #6
Prezident
Мужской Умудрённый
 
Аватар для Prezident
 
Регистрация: 29.10.2003
Адрес: Томск
Vanya
Если такой умный чё тогда спрашиваешь?
Возможно всё но с определённой точностью!
__________________
Россия победит!
Prezident вне форума  
Ответить с цитированием
Непрочитано 09.01.2004, 17:45   [включить плавающее окно]   #7
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Prezident
Цитата
Если такой умный чё тогда спрашиваешь?
???
Я не спрашивал, см выше.
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Непрочитано 09.01.2004, 18:46   [включить плавающее окно]   #8
Prezident
Мужской Умудрённый
 
Аватар для Prezident
 
Регистрация: 29.10.2003
Адрес: Томск
извеняюсь перепутал. Бывает :)
__________________
Россия победит!
Prezident вне форума  
Ответить с цитированием
Непрочитано 10.01.2004, 10:43   [включить плавающее окно]   #9
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
Vanya
А ты не интересовался МАШИННЫМ представлением чисел с плавающей запятой? В частности, 10-байтовыми регистрами FPU?
Цитата
А пишешь, что программер ....
Пишу. Потому что программер. И не раз сталкивался с проблемой, что 2/2 далеко не всегда дает 1. Это не ошибки браузера или чего бы то ни было, это погрешность в представлении дробных чисел. А также потеря точности при вычислениях -- регистры сопроцессора имеют ограниченную разрядность.
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 10.01.2004, 19:27   [включить плавающее окно]   #10
LarrySh
Начинающий
Автор темы
 
Регистрация: 24.10.2003
Цитата
что 2/2 далеко не всегда дает 1. Это не ошибки браузера или чего бы то ни было, это погрешность в представлении дробных чисел. А также потеря точности при вычислениях -- регистры сопроцессора имеют ограниченную разрядность.
Однако JScript не устраняет эту погрешность - так? Выходит, MS опять крупно лажанулась. IMHO, не так уж сложно было предусмотреть округление. Ну, или хотя бы обеспечить маскирование разрядности вывода? Может, я чего не понимаю, или еще не знаю?
__________________
Д-р гонорис кауза Рем Квадрига

Последний раз редактировалось LarrySh; 14.01.2004 в 00:56.
LarrySh вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 12.01.2004, 09:59   [включить плавающее окно]   #11
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Sanya
Честно призаться, в FPU не лазил, но получается что IE возвращает комп в состояние галимых ламповых калькуляторов, которые не могут посчитать простейшие числа.
И еще
Цитата
2/2 далеко не всегда дает 1
Но мы не делим, а умножаем. Такого глюка небыл о даже на калькуляторах, притом при стольких разрядах (3).
Поэтому, сваливать всю вину на комп абсолютно неправильно.

LarrySh
Интересно, а что дает этот код в ДРУГИХ браузерах?
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Непрочитано 12.01.2004, 17:24   [включить плавающее окно]   #12
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
Vanya
Цитата
Но мы не делим, а умножаем.
никакой разницы, алгоритмы похожи и дают одинаковые "спецэффекты".
Цитата
Такого глюка небыл о даже на калькуляторах, притом при стольких разрядах (3).
Поэтому, сваливать всю вину на комп абсолютно неправильно
калькулятор считает совсем по-другому -- другой принцип и другой алгоритм
Цитата
но получается что IE возвращает комп в состояние галимых ламповых калькуляторов, которые не могут посчитать простейшие числа
ИЕ тут не виноват -- любая другая программа даст точно такой же результат (если, конечно, в ней не предусмотрено округление). И бороться с этим нельзя в принципе.
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 13.01.2004, 10:00   [включить плавающее окно]   #13
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Sanya
Цитата
ИЕ тут не виноват -- любая другая программа даст точно такой же результат (если, конечно, в ней не предусмотрено округление). И бороться с этим нельзя в принципе.
Все таки очень интересно, что выдадут другие браузеры, на подобный код. (У меня других просто нет)
В глубины процессора наверно не нужно лазить.
Гораздо полезнее выяснить, глючит только IE или все браузеры.
Ведь мы пользователи (и программисты) хотим получать точные разультаты.

И городить округление на php в примитивной html странице - это дикость.
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Непрочитано 13.01.2004, 11:03   [включить плавающее окно]   #14
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
У меня Опера дает 76,199999...
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 13.01.2004, 11:14   [включить плавающее окно]   #15
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Понятно...
Но как же работат Calculator, VC++ и др.?
Наверно это глюк html вычислений.
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Непрочитано 13.01.2004, 12:05   [включить плавающее окно]   #16
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
Цитата
Но как же работат Calculator, VC++ и др.?
Есть сильное подозрение, что в виндошном калькуляторе не используется перевод чисел в двоичный вид, и вычисления выполняются над символьными данными (типа "в столбик").
А VC++ (как, впрочем, и любой другой язык программирования) выдаст 76.19999 -- я проверил.
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 13.01.2004, 12:06   [включить плавающее окно]   #17
Vanya
Мужской Недосягаемый
 
Аватар для Vanya
 
Регистрация: 24.11.2003
Адрес: Наукоград Пущино
Еще одна мечта развеялась
__________________
Признайся себе, что тебе в этот момент меньше всего хочется делать
и сделай это.
Vanya вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

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

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

Быстрый переход


Текущее время: 10:29. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey