In short, I often hear the following “genius posts from leading experts in the…

· Original on Telegram


In short, I often hear the following “genius posts from leading experts in the field of everything that’s trending.” Like, all your ChatGPTs are, you know, unreliable, it can’t do any real tasks. Remember, it couldn’t even compare two numbers. Or it can’t repeat after me, or calculate something that even a regular calculator can do.

Well, a calculator is exactly what we’re going to talk about. As an example of a technology we’re used to and that most people basically don’t understand.

So what’s the difficulty? And the difficulty, my friends, is floating-point numbers — those, in short, non-integers, something like 0.1 or 0.2. For example, did you know that addition is not associative on modern computers. Meaning, it can happen that:
0.1+(0.2+0.3) is not equal to (0.1+0.2)+0.3

To implement operations with numbers like these, the guys came up with the IEEE 754 standard (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
which over 60+ pages describes the rules. And even if you follow it, the exact same program can produce different results on different systems!

A few underwater rocks from theory:
1/ When subtracting close numbers, catastrophic loss of precision can happen
2/ Intermediate results can be rounded differently depending on the implementation
3/ Numbers can be represented in different formats (single/double precision)
4/ You need to correctly handle special values (infinity, NaN)
5/ Operations must produce a correctly rounded result

Once upon a time, back in the old days, Google hired one engineer to write a calculator for Android that would work well and without errors. His name was Hans Boehm. So this guy got so obsessed that he put out a whole spec and paper about the API for working (https://dl.acm.org/doi/pdf/10.1145/3385412.3386037)
with numbers.

So, know this: what today seems extremely precise and you trust it, in reality not only can it produce errors (even if understandable ones), but it’s also a gigantic amount of work over dozens of years.

P.S. by pure coincidence a similar article came out on HN
https://news.ycombinator.com/item?id=43066953

Original (RU)

Короче говоря часто слышу следующие «гениальные посты от ведущих экспертов в области всего, что трендует». Мол ваши все ChatGPT это знаете ли ненадежно, он там никакие нормальные задачи не умеет выполнять. Помните даже два числа не мог сравнить. Или вот повторить за мной не может или там вычислить то, что может даже обычный калькулятор.
Ну вот как раз о калькуляторе речь и пойдет. Как примере технологии к которой мы привыкли и которую большая часть людей в принципе не понимает.
Так в чем же сложность. А сложность друзья мои в числах с плавающей запятой, те самые короче говоря не целые, что-то типа 0.1 или 0.2. Например вы знали, что операция сложения не ассоциативна в современных компьютерах. А именно, может получится, что:
0.1+(0.2+0.3) не равно (0.1+0.2)+0.3
Для реализации операций с такими вот числами ребята придумали
стандарт IEEE 754, (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
который на 60+ страницах описывает правила. И даже при его соблюдении одна и та же программа может давать разные результаты на разных системах!
Несколько подводных камней из теории:
1/ При вычитании близких чисел может произойти катастрофическая потеря точности
2/ Промежуточные результаты могут округляться по-разному в зависимости от реализации
3/ Числа могут быть представлены в разных форматах (одинарная/двойная точность)
4/ Нужно правильно обрабатывать особые значения (бесконечность, NaN)
5/ Операции должны давать корректно округленный результат
Когда-то в старые времена Google нанял одного инженера, чтобы написать калькулятор для Android который бы работал хорошо и без ошибок. Звали его Ханс Боэм. Так вот мужик настолько заморочился, что выпустил
целую спецификацию и работу про API работы (https://dl.acm.org/doi/pdf/10.1145/3385412.3386037)
с числами.
Так, что знайте, что сегодня кажется крайне точным и вы ему доверяете на самом деле мало того, что может давать ошибки пусть и понятные, так и это огромный труд десятков лет.
P.S. по чистой случайности похожая статья вышла в HN
https://news.ycombinator.com/item?id=43066953