Сложение против вычитания в потере значимости с плавающей запятой - PullRequest
1 голос
/ 19 сентября 2010

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

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

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

1 голос
/ 19 сентября 2010

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

 1.23456789    9 significant digits
-1.23456785    9 significant digits
───────────
          4    1 significant digit
...