Calc считает с ошибкой

Автор ЗабЦСМ Алексей, 5 июля 2023, 04:55

0 Пользователи и 1 гость просматривают эту тему.

ЗабЦСМ Алексей

Формула невероятна простая "=AH34-L34".
L34=100,00000000000000000000
AH34=99,60000000000000000000
По итогам вычислений программа выдает следующее: AZ34=AH34-L34=-0,40000000000000600000
Откуда появляется эта волшебная цифра 6 в 13 знаке после запятой для меня остается загадкой. Может кто-то сталкивался с подобным?


mikekaganski

#1
FAQ.

Также можно поиграться с калькулятором IEEE 754 на этой странице. А здесь можно увидеть, что в компьютере нет "99,6", а есть только "99.599999999999994315658113919198513031005859375", что и даёт такой результат.

Только не "в 13 знаке после запятой", а "в 15".
С уважением,
Михаил Каганский

economist

В некоторых случаях, например, в бухстатучете можно включить "экранное округление" и все будет сходиться:

Alt+F12 - LibreOffice Calc - Вычисления - Точность как на экране

В случае же с наукой и измерениями (смотрю на ник с "ЦСМ") - нужно взвесить за и против такого шага для каждого файла. Если точность важнее - округляйте явно с ОКРУГЛ() до нужной точности - аргументы, результат или и то, и другое.

Да и в бухучете щелкать не надо. Например курсы валют ЦБ всемилостивейше повелевать соизволил устанавливать с 4-мя знаками после запятой. Если яч. с курсом округлить до копеек - будет заметная ошибка и итоги с 1С не сойдутся.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

sokol92

Цитата: ЗабЦСМ Алексей от  5 июля 2023, 04:55AH34=99,60000000000000000000
Добро пожаловать в мир приближенных вычислений!
В двоичной системе счисления 99,6 - бесконечная периодическая дробь (как и любая простая несократимая дробь, знаменатель которой больше 1 и отличен от степени 2).
Не используйте для сравнения дробных чисел равенство, сравнивайте так:
ABS(A1-B1)<1E-12
(правую часть подбираем с учетом знаний о диапазонах значений A1, B1).
Так что с Вашими данными всё в порядке. 
Владимир.