darkslave (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Откат к версии 6.15
 
Столкнулся с аналогичной проблемой при работе собственного скрипта.
Скрипт делает следующее: создает Quik таблицу (AllocTable / CreateWindow) и периодически обновляет в ней данные.
Данные обновляются через полную очистку таблицы (Clear) и добавление новых строк (InsertRow).
Скрипт спокойно себя ведет, когда окно таблицы не в фокусе, но стоит только кликнуть по строке таблицы (видимо в момент обновления данных) - сразу вылетает ошибка.
Как ранее упоминал sam063rus , скорее всего причина в гонке потоков и некорректной синхронизации.
Версия Quik 7.5.0.72.
Странный перенос стратегии с WLD в LUA
 
Какой накал, какие страсти.
Роман, вам верно подсказали, что перед тем как вести дискуссию, стоит ознакомиться со спецификой хранения чисел с плавающей точкой (стандарт IEEE 754) и со спецификой вывода данных на консоль.

По вашему примеру:  969.51 - 960.99 = 8.519999999999982
этот результат будет одинаков и на Lua, и на PHP, и на Java, и на C, и даже на Javascript..
я, осознавая глупость этого, не поленился и проверил.. мало ли, что бывает..

проблема, которую вы пытаетесь раздуть и возложить на разработчиков Quik -- это никакая не проблема, это ваше непонимание работы языка, и разработчики Quik вообще ни причем..
в lua результат вычисления 969.51 - 960.99 будет как и везде 8.519999999999982
но при простом выводе на консоль через print число будет отформатировано под текущую локаль и округлено до числа знаков после запятой, которое также задается в локали.. потому вы видите 8.52000 и это вас удивляет..
но то, что на консоль вывелось 8.52000 совсем же не значит, что в памяти число такое же.. как, я написал выше, оно равно 8.519999999999982 и именно но используется в расчетах..

плюс ко всему, надо понимать, что числа с плавающей точкой это не точные числа, они имеют погрешность.. но погрешность там порядка 10^-15, что просто ничтожно мало (если вы конечно не работаете с числами в районе нуля)..
Страницы: 1
Наверх