Добавить в корзинуПозвонить
Найти в Дзене

"Калькулятор - это просто" или "Как выглядит настоящая разработка ПО

"Калькулятор - это просто" или "Как выглядит настоящая разработка ПО". Детям часто дают задачку написать свой калькулятор. Это ведь просто, пара чисел и операции... Очевидный способ познакомить новичка с арифметическими операциями и условными ветвлениями. Каждый из нас может написать калькулятор! Но компьютерные науки, это не так просто. Проблема в том, что с представлением вещественных чисел, которое используют все компьютеры и телефоны, невозможно считать правильно (простыми операциями). Потому что числа почти никогда не бывают точными. А калькулятор (в теории) должен показывать правильные ответы. Владельцы айфонов могут прямо сейчас попробовать вбить выражение: (e^1000) + 1 − (e^1000) На тех, что я видел, нет сложных операций, вообще 🤷‍♂ Человек легко может догадаться, что ответ 1. LLMки, кстати, тоже, потому что они основаны на анализе синтаксических токенов (но точные ответы давать не может, если только не написать для LLMки калькулятор, как ниже). Для того, чтобы решить эту

"Калькулятор - это просто" или "Как выглядит настоящая разработка ПО".

Детям часто дают задачку написать свой калькулятор.

Это ведь просто, пара чисел и операции...

Очевидный способ познакомить новичка с арифметическими операциями и условными ветвлениями.

Каждый из нас может написать калькулятор!

Но компьютерные науки, это не так просто.

Проблема в том, что с представлением вещественных чисел, которое используют все компьютеры и телефоны, невозможно считать правильно (простыми операциями).

Потому что числа почти никогда не бывают точными.

А калькулятор (в теории) должен показывать правильные ответы.

Владельцы айфонов могут прямо сейчас попробовать вбить выражение:

(e^1000) + 1 − (e^1000)

На тех, что я видел, нет сложных операций, вообще 🤷‍♂

Человек легко может догадаться, что ответ 1.

LLMки, кстати, тоже, потому что они основаны на анализе синтаксических токенов (но точные ответы давать не может, если только не написать для LLMки калькулятор, как ниже).

Для того, чтобы решить эту задачу, инженеры из Google, рассматривали следующие варианты:

1) BigNumber-арифметика - арифметика на больших числах (не может работать с алгебраическими и бесконечными числами).

2) Алгебраическая арифметика - представление всех чисел в виде многочленов, операции над многочленами (может работать с алгебраическими числами, но не может с бесконечными).

3) Рекурсивная вещественная арифметика (RRA) - не может сравнивать числа, чтобы давать точный ответ (это алгоритмически неразрешимая задача).

4) и другое.

В результате пришлось объединять подходы.

Так появился калькулятор в Android, который считает правильно.

Кстати, в машинном и глубоком обучении, модели обучаются на тех самых числах, которые не могут быть точно представлены.

Это делается для экономии ресурсов. Иногда даже специально занижают точность.

Потому числа в моделях всегда с накопленной погрешностью.

#junior@egorword

p.s. Статья на русском.