Сложение и вычитание при потере значимости с плавающей запятой

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


person ZuluForce    schedule 19.09.2010    source источник


Ответы (2)


Между сложением и вычитанием нет разницы, вычитание — это сложение с инвертированным операндом. Вы правы, чтобы добавить или вычесть, вы должны сдвинуть число с меньшим показателем степени в битовое ведро, чтобы выполнить операцию, в результате чего для этого операнда будет меньше значащих битов. Если показатели больше отличаются от размера мантиссы, то при сложении или вычитании вы получите число с большей степенью, в результате все биты меньшего числа сместятся в битовое ведро N + 0 = N - 0.

person old_timer    schedule 20.09.2010

При вычитании двух почти равных чисел в разнице будет меньше значащих битов, чем в исходных числах. Десятичный пример:

 1.23456789    9 significant digits
-1.23456785    9 significant digits
───────────
 0.00000004    1 significant digit
person dan04    schedule 19.09.2010