Спорим, многие из вас считаю лучше чем калькулятор майкрософта?
Ну как минимум иногда.
Немного научпопа, моим корявым "языком".
Почему я решил про это рассказать вообще?
Да мне скинули пост с видео вот оно.
В общем я тут же ответил, что вообще написать калькулятор, офигеть как не просто.
Точнее калькулятор, который всегда считает верно.
Вот вам простой пример (ну относительно простой конечно), который почти каждый решит.
Погнали.
(10^100)+1-(10^100) = ?
Теперь, дайте себе секунду, ну может десять, что бы посчитать.
В общем и целом, как можно упростить, вдруг вы боитесь этих больших степеней, как это любят делать математики.
Представим, что вместо 10^100 - у нас будет X
Тогда имеем
X+1-X
И тут, даже если вам было страшно, в целом становится понятно.
У нас есть что то, добавляем 1, и отнимаем что то, ответ?
Ну правильно 1.
Открываем калькулятор, что бы проверить (подойдут почти любые, так как минимум до какого то времени все они не умели это считать)
Я взял из win 11.
Ну как же ноль, если 1?
Первые, ну на сколько я знаю, решили эту проблему в Google.
В общем, я не буду тут сильно углубляться, во первых потому что спустя столько лет тяжело, во вторых потому что думаю не всем это интересно, а кому интересно снизу будет ссылка на первоначальную статью где все расписано.
В общем, проблема в том что есть числа, которые высчитать с точностью сложно или даже не возможно
1/3 например никогда нельзя посчитать точно, но калькулятору просто необходимо обрезать 3 в периоде, что бы получить хоть какой то ответ.
Так же и число 10^100 для компьютера очень большое.
Большинство числовых типов занимает 2 или 4 байта, если снять это ограничение, то ошибка уйдет, так как он сможет "представить" себе данное число.
И даже с дробями проблем тут не должно быть, так как любую дробь можно представить целыми числами (числитель и знаменатель), в целом бы казалось задача решена, отдаем больше ресурсов и все.
Но инженеров компании это не устроило, так как наш мир содержит удивительные константы например число π, его представить в виде целых чисел не получится.
Потому они пришли к RRA (Рекурсивная вещественная арифметика)
Метод позволяет высчитывать значения с определённой точность.
То есть попросив посчитать π например до первого знача получим 3,1, если точность два, то будет 3,14 и так далее.
Сперва кажется что вот оно решение, используем RRA задавая большую точность и получим верный результат, но не совсем так просто.
Если упростить, то RRA на простом примере 1-1 покажет не 0, а 0,000000 и сколько то знаков мы тут установили.
Плюс, тут надо понимать что используя RRA мы не можем быть уверены что цифры равны друг другу, а только с определённой точностью, то есть пример 1/3 = 1/3 был бы просто адом, так как с каждый разом увеличивалась бы разрядность что бы убедиться что цифры равны друг другу.
Постановка задачи состояла в том, чтобы определить, равны ли два конструктивных вещественных числа. Это было невозможно решить. Они упростили задачу и приблизились к решению, ограничив способы построения чисел:
- Четыре основные арифметические операции и квадратные корни
- Тригонометрические функции sin, cos и tan и их обратные величины
- Экспоненциальные и (натуральные) логарифмические функции
Это гораздо меньший набор чисел, чем все конструктивные вещественные числа. И на самом деле кто-то уже исследовал именно эту задачу. Их звали Дэн Ричардсон и Джон Фитч, и они решили её в 1994 году.
И алгоритм работал, но тут стала проблема в быстродействие, а потому они решили что методы RRA вполне себе подходят под задачу с некоторыми ограничениями
ПС Я очень посмеялся в свое время с того что они сначала такие RRA круто, но не то, а потом такие да и похуй))