2015-10-23 11 views
0

Я пытаюсь лучше понять арифметику с плавающей запятой. Я знаю, что epsilon (e) машины определяется как разница между 1 и следующим наибольшим числом (то есть следующее наибольшее число после 1, которое может быть точно представлено в плавающей точке, равно 1 + e).Умножение машины epsilon

Однако, что я получаю в плавающей точке при умножении (1 + e) ​​* (1 + e)? Теоретически оно должно быть 1 + 2 * e + e^2, но (при условии, что e < 1) e^2 < e e e2 2 не будет полностью точным. Что этот ответ проходит в плавающей точке?

+0
+0

@ user2357112 так почему же '1 + 2 * e + e^2' представим? – bnorm

+0

Представляя это точно, требуется больше бит точности, чем у имеющегося формата с плавающей запятой. Напротив, 'e^2' требует только один бит точности. – user2357112

ответ

1

Как отмечено в комментариях, eps^2 точно представляется в любой системе с плавающей запятой. Но при добавлении ко всему> = 1 он просто усекает. Недостаточно бит точности, чтобы включить его, а термин «1.0» связывает экспоненту. Поэтому -

(1.0 + eps)^2 -> 1.0 + 2*eps 

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

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