Столкнулся с аналогичной проблемой при работе собственного скрипта. Скрипт делает следующее: создает Quik таблицу (AllocTable / CreateWindow) и периодически обновляет в ней данные. Данные обновляются через полную очистку таблицы (Clear) и добавление новых строк (InsertRow). Скрипт спокойно себя ведет, когда окно таблицы не в фокусе, но стоит только кликнуть по строке таблицы (видимо в момент обновления данных) - сразу вылетает ошибка. Как ранее упоминал sam063rus , скорее всего причина в гонке потоков и некорректной синхронизации. Версия Quik 7.5.0.72.
Какой накал, какие страсти. Роман, вам верно подсказали, что перед тем как вести дискуссию, стоит ознакомиться со спецификой хранения чисел с плавающей точкой (стандарт 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, что просто ничтожно мало (если вы конечно не работаете с числами в районе нуля)..