Как обнаружить переполнение мантиссы в GMP до или после того, как оно произойдет?
Вопрос
Вопрос, который я имел в виду вопрос касался мантиссы, а не показатель степени, и это во многом связано с вопросом, который я задал ранее на этой неделе относительно «пропущенные» цифры в сумме двух отрицательных чисел с плавающей запятой.
Учитывая, что мантисса имеет переменную точность, как определить, что текущая настройка точности мантиссы вышла за пределы?Или, с упреждающей стороны, как можно определить, вероятно ли переполнение мантиссы с точностью до мантиссы?
С уважением, Брюс.
Решение
Есть несколько численных методов, позволяющих проверить, не потеряете ли вы точность, но суть в том, что вам нужно лучше понять определение точности.
-4939600281397002.2812
и
-4939600281397002.2812000000000000
НЕ одно и то же число.
Когда вы добавляете
-2234.6016114467412141
и
-4939600281397002.2812
вместе, правильный Выходные данные будут иметь точность только 20 цифр, поскольку дополнительные 12 цифр в меньшем числе бессмысленны, учитывая, что 12 цифр одинакового размера в большем числе неизвестный.Вы можете подразумевать, что они равны нулю, но в этом случае вы должны явно объявить их такими и использовать систему нумерации, которая может это обработать — компьютер не очень хорошо понимает неявные намерения.
Что касается определения того, когда у вас возникнет эта проблема, все, что вам нужно сделать, это выяснить, имеют ли они один и тот же показатель степени (при условии, что нормализованная мантисса +/- 1 или аналогичный двоичный эквивалент).Если они не нормализованы, вам нужно будет их нормализовать для сравнения или использовать немного более сложное сравнение с показателем степени.
Точность и аккуратность - это не одно и то же...
-Адам