如何在GMP发生之前或之后检测尾数精度溢出?

时间:2009-01-23 12:00:28

标签: c overflow detection gmp mantissa

意味着提出的问题涉及尾数,而不是exponent,并且与我在本周早些时候提到的关于"missing" digits on the sum of two negative floats.的问题有很多关系

鉴于尾数具有可变精度,如何判断一个尾数是否溢出了尾数的当前精度设置?或者,从主动方面来看,如何判断尾数精度是否溢出?

亲切的问候, 布鲁斯。

1 个答案:

答案 0 :(得分:2)

有一些数值方法可以看出你是否会失去精度,但最重要的是你需要更好地理解精度的定义。

-4939600281397002.2812

-4939600281397002.2812000000000000

不是相同的数字。

添加

-2234.6016114467412141

-4939600281397002.2812

一起,正确输出只有20位数的精度,因为较小数字中的额外12位数字是无意义的,因为较大数字中的12个相似大小的数字是未知。你可以暗示他们是零,但如果是这样,你必须明确地声明它们是这样的,并使用一个可以处理它的编号系统 - 计算机不善于理解隐含的意图。

至于检测何时出现此问题,您需要做的就是找出它们是否具有相同的指数(假设标准化的尾数+/- 1或类似的二进制等价物)。如果它们没有标准化,那么你需要将它们标准化以进行比较,或者使用与指数稍微复杂的比较。

精确度和准确度不是一回事......

- 亚当