Округление числа до требуемой точности (заданного количества значащих цифр)

Как округление числа до заданной точности связано с понятием значащих цифр. Чем округление до нужного количества значащих цифр отличается от обычного округления до нужного количества знаков после запятой?

Дело в том, что знаки после запятой и значащие цифры это разные понятия.

Именно, значащие цифры (или значащие разряды), это те цифры числа, которые выражают его с требуемой точностью. При этом цифры числа могут быть округлены. Определяются как все цифры числа, начиная с первой слева, отличной от нуля, до последней, за правильность которой можно ручаться (Словари и энциклопедии на Академике).

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

Постановка задачи

Постановка данной задачи довольно проста.

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

Алгоритм решения

Первое с чего следует начать это определить порядок числа и общее количество десятичных разрядов.

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

В остальных случаях требуется выполнить округление. К счастью, эту задачу можно легко свести к обычному округлению до заданного количества знаков после запятой. Для этого необходимо:

  1. Разделить округляемое число на 10 в степени равной его порядку;
  2. Округлить полученный результат до количества знаков после запятой равному требуемому количеству значащих цифр минус 1;
  3. Умножить результат округления на 10 в степени равной порядку исходного числа.

Для наглядности ниже приведены примеры реализации округления до заданного количества значащих цифр на языках программирования Delphi, C# и Java.

Пример на Delphi:

Пример на C#:

Пример на Java:

Проблема точности

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

Насколько это критично, зависит от специфики выполняемых расчётов или измерений. В инженерных расчётах это, как правило, вполне допустимо. Тем более, что их точность редко превышает 3-4 значащих цифры. В тоже время для финансовых расчётов, где требуется сравнивать денежные суммы, подобные издержки недопустимы. Также, наличие погрешности может сказаться на точности научных расчётов и расчётов с высокими требованиями к точности.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *