пятница, 19 августа 2011 г.

Разбираемся, что на самом деле значит "значимые цифры"

Это перевод Understanding what significant digits really mean. Автор: Реймонд Чен.

Числа с плавающей запятой двойной точности (double-precision floating point number) содержат 15 значащих цифр. Что это значит на самом деле?
Я умножил 0,619207 на 10'000'000 и получил 6'192'069,999999991 вместо 6'192'070. Это же только шесть цифр; где мои обещанные пятнадцать?
Разговор о значащих цифрах - это просто сокращение для относительной погрешности. Это не означает, что первые пятнадцать цифр в точности совпадают с результатом (если вы проведёте больше времени в численном анализе, то услышите как люди говорят о вещах вроде "пять с половиной значащих цифр". Если бы значением "значащих цифр" было таким буквальным, то как вы могли бы иметь половину цифры?).

Относительная ошибка в данном вычислении равна 9 / 6'192'070'000'000'000 = 1,5 × 10-15, что согласуется с точностью в пятнадцать значащих цифр.

Но даже если вы примете буквальное значение слов, то числа примера всё ещё равны друг другу до пятнадцати знаков. Вспомните, что 0,99999... = 1, и поэтому значения
6192069,999999991
6192069,999999999...
согласуются на пятнадцать значащих цифр - как и было обещано.

А если вы адепт гипер-буквального чтения и отказываетесь принимать трактовку 0,99999... = 1, то вам придётся признать, что единственными возможными значениями для числа значащих цифр являются ноль и бесконечность!

Рассмотрите пример вычислений, в результате которых получается ровно 1, а сами вычисления выполняются с точностью N значащих цифр (где N > 0). Поскольку вы не принимаете, что 0,9 согласуется с 1,0 в одной значащей цифре, то единственными значениями, которые согласуются с 1,0 хотя бы по одной значащей цифре, будут числа в форме "один, запятая, что-то". Обозначим результат вычислений через 1 + ε, где 0 ≤ ε < 1. Теперь вычтем это из 2.0, что даст 1 − ε. Этот результат тоже должен иметь N значащих цифр. И снова, поскольку вы не принимаете, что 0,9 согласуется с 1,0 по одной значащей цифре, то чтобы этот результат был бы хорош для N значащих цифр (N > 0), результат должен иметь форму "один, запятая, что-то". Обозначим результат как 1 + δ, где 0 ≤ δ < 1.

Итак, мы получили 1 − ε = 1 + δ, откуда следует ε = −δ. Поскольку и δ, и ε больше или равны нуля, то единственное решение этого уравнения: ε = δ = 0. Соответственно, единственным числом, которое равно единице до какого-то ненулевого числа значащих цифр (если вы подписались на гипер-буквальную трактовку) будет сама единица. Другими словами, единственное возможное (не нулевое) число значащих цифр - бесконечность. И я думаю, что мы все согласны в том, что если единственными значениями количества значащих цифр были бы ноль с бесконечностью, то вся концепция значимых цифр была бы глупой и бесполезной.

Вот почему значимые цифры не используют гипер-буквальное определение.

2 комментария:

  1. Имхо, не слишком удачная статья. Какой-то несистемный подход. Пояснили один нюанс. А о том, что этот нюанс живёт в большом классе проблем с погрешностями - молчок.

    ОтветитьУдалить
  2. Просто это - заметка в блоге, поясняющая один конкретный момент.

    Это не статья в учебнике.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.