- PVSM.RU - https://www.pvsm.ru -
Идущий в составе iOS калькулятор выполняет операции в четверной точности (quad float, мантисса 112 бит, от 33 до 36 десятичных цифр), затем округляет результат по эстетическим соображениям. Например, количество отображаемых значащих цифр отличается в вертикальном режиме, горизонтальном режиме и при копировании в буфер обмена.
Можно в этом убедиться на примере дроби 1/9801 [1], десятичное представление которой очень удобно для подобных экспериментов. Тут калькулятор iOS показывает 18 знаков после запятой.
Если вычесть из дроби показанное калькулятором округлённое значение то становится видно, что во внутреннем представлении цифр больше.
Таким способом можно вытащить 38 цифр после запятой. Если отбросить три ноля в начале, остаётся 35 значащих цифр мантиссы, как и обещано для четверной точности.
Встроенный в Android калькулятор работает в конструктивных вещественных числах (Constructive Reals) [2]. Результат можно промотать влево, получив столько значащих цифр, сколько хочется. Они считаются на ходу. В коде конструктивные вещественные числа представлены не данными, а функциями, которые возвращают нужные значащие цифры по запросу.
Слева калькулятор Android до промотки, справа - после. Видно, что значащие цифры продолжают поступать по мере необходимости.
Несмотря на то, что Hans Boehm давно опубликовал исходный код библиотеки работы с конструктивными вещественными числами com.hp.creal, мне не удалось найти готовый порт AOSP ExactCalculator на iOS. Пришлось сделать, благо нонче это дело нехитрое.
Попробуйте [3].
Автор: dimview
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ios/457824
Ссылки в тексте:
[1] 1/9801: https://www.youtube.com/watch?v=waYr2J15uUc
[2] конструктивных вещественных числах (Constructive Reals): https://habr.com/ru/articles/883028/
[3] Попробуйте: https://apps.apple.com/us/app/constructive-calculator/id6778157421
[4] Источник: https://habr.com/ru/articles/1079856/?utm_campaign=1079856&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.