Эксель и НОД

Делал по работе таблицу с концентрациями вещества. Мне нужно было получить колонку с пропорциями и использовал в экселе функцию НОД (наименьший общий делитель, если кто не знает).

Столкнулся с вот таким интересным явлением (это уже не мои вычисления а попытка разобраться в ошибке с концентрацией 55%):

Эксель и НОД Microsoft Excel, Таблицы Excel, Математика, Ошибка, Задача, Длиннопост

Первых две колонки - это числа (изначально - целые). В правой колонке - их НОД.

Эксель и НОД Microsoft Excel, Таблицы Excel, Математика, Ошибка, Задача, Длиннопост

То же самое, только с отображением формул.

Чудесно, не правда ли? В какой-то момент эксель перестаёт адекватно воспринимать полученное в вычислении число и возвращает феерический результат.

Мне уже стало совсем интересно и я решил прогнать расчёт от 1 до 100%.
Чтобы не городить сложных формул, я делал промежуточные решения в столбцах. Так легче отследить ошибку.
И вот когда я на это посмотрел... я был удивлён.

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

Из всего этого ряда мне изначально нужно было всего 20 значений. Но посчастливилось поймать ошибку и я полез разбираться.
На первый взгляд кажется, что у экселя проблема с простыми числами. Но нет, он даже для чётных чисел после 2-3 вычислений не способен выдать результат. У чётных чисел НОД = 1.

Эксель и НОД Microsoft Excel, Таблицы Excel, Математика, Ошибка, Задача, Длиннопост

Более того, стало заметно, что точность операций с плавающей запятой - непредсказуема.
Например, НОД (20;80) он считает верно, а НОД (80;20) - уже не может. Хотя результат должен быть одинаковый.
Получается, что алгоритм вычисления НОД очень чувствителен и перед ним надо числа округлять до целых.

Используется Excel 2019. Вот прилагаю файл, если кому интересно:
https://docs.google.com/spreadsheets/d/16RMazU_jAGKAg3UHpIYL...

У кого есть возможность проверить формулы в своём экселе - какой результат покажет вам?
В комментариях указывайте версию своего экселя (или офиса).

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

У меня что 20 80, что 80 20 показывает верно - 20. Офис 21 года

Иллюстрация к комментарию
раскрыть ветку (7)
Автор поста оценил этот комментарий

так у вас 20 и 80 заданы или это вычисляемые значения?

раскрыть ветку (6)
1
Автор поста оценил этот комментарий
Вам уже написали причину. Для исчисляемых значений просто добавь округл
раскрыть ветку (1)
Автор поста оценил этот комментарий

С причиной я разобрался. Спасибо.

0
Автор поста оценил этот комментарий
Это не Ексель дурак, а ручками округление нужно добавлять. Когда вычисления делаешь.
раскрыть ветку (3)
Автор поста оценил этот комментарий

он не дурак, а особенный. да-да. знаем мы, куда это ведёт. =)

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

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Ну когда у тебя массивные формулы и куча вычислений, то во первых тебе лучше знать где отсекать, а где округлять, а два, вшитая функция на округления всего еще сильнее нагрузит вычисления, да и потом округлять можно, а до какого знака?
раскрыть ветку (1)
Автор поста оценил этот комментарий
вшитая функция на округления всего еще сильнее нагрузит вычисления

а не вшитая, вручную дописанная не нагрузит? учитывая, что там без неё никак?

округлять можно, а до какого знака?

ну очевидно же - до целых. НОД - это функция для натуральных чисел.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку