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

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

При работе с числовыми колонками в PolyAnalyst некоторые математические операции могут дать неожиданный результат. Это связано с тем, как компьютер выполняет такие операции, как сложение, вычитание и деление с числами, которые содержат десятичные знаки.

PolyAnalyst делегирует выполнение математических операций центральному процессору компьютера (ЦП). Результат, таким образом, может варьироваться в зависимости от процессора (или нескольких процессоров - в мультипроцессорной архитектуре) компьютера, на котором установлен сервер PolyAnalyst. Подобное делегирование необходимо для того, чтобы PolyAnalyst мог выполнять несколько высокоскоростных операций и максимально быстро выдавать результат. Для того, чтобы понять, как работает процессор, можно ознакомиться с документацией на него.

PolyAnalyst по-особому сохраняет числовые значения с плавающей запятой (FPV, от англ. floating point value). Операции с числами с плавающей запятой чаще всего являются причиной ошибок в компьютерном программировании. Обычно это представляет проблему для тех, кто не понимает, как компьютер выполняет приближенные математические вычисления. В то время как на экран может выводиться значение 0,1, компьютер на самом деле может сохранять полное значение - 0,100000000001. В таком случае, если вы многократно выполните операцию сложения для значения 0,1, итоговая сумма может оказаться для вас неожиданной. Происходит снижение точности вычислений.

Только числа, кратные двум, бывают представлены точно. Например, 1, 2, 4, 8, а также 0,5.

Понимание этой базовой характеристики операций с числами с плавающей запятой важно не только при работе с системой PolyAnalyst. Это фундаментальный недостаток многих программ, если не сказать - их большинства.

Эту ошибку обычно называют случайной ошибкой, или ошибкой округления. Эта ошибка встречается редко, поскольку редки ситуации с достаточно большим количеством операций. В целом же, при малом количестве операций подобная ошибка исключена. Ошибка округления возникнет, если вы количество операций достигает \(10^{18}\).

Таким образом, постарайтесь всегда помнить о том, что выход какого-то узла, который выполняет много математических операций, например, Агрегирование, суммирующий исходные числовые данные, может быть не совсем корректным из-за характера выполняемых компьютером операций со значениями с плавающей запятой.