这个问题我意味着要求关注尾数,而不是exponent,并且有很多做与我在本周早些时候提出的问题有关"missing" digits on the sum of two negative floats.如何检测GMP中的尾数精度溢出,发生之前还是之后?
鉴于尾数具有可变精度,如何做一个判断是否已经溢出了尾数的当前精度设置?或者,从积极的一面来看,如何判断尾数精度溢出是否可能?
亲切的问候, 布鲁斯。
这个问题我意味着要求关注尾数,而不是exponent,并且有很多做与我在本周早些时候提出的问题有关"missing" digits on the sum of two negative floats.如何检测GMP中的尾数精度溢出,发生之前还是之后?
鉴于尾数具有可变精度,如何做一个判断是否已经溢出了尾数的当前精度设置?或者,从积极的一面来看,如何判断尾数精度溢出是否可能?
亲切的问候, 布鲁斯。
有几种数值方法可以看出你是否会失去精度,但底线是你需要更好地理解精度的定义。
-4939600281397002.2812
和
-4939600281397002.2812000000000000
是不一样的数字。
当您添加
-2234.6016114467412141
和
-4939600281397002.2812
在一起时,正确输出只会有精度20位数字,因为在另外12位较小的数字是无意义的,因为较大数字中的12个相似大小的数字是未知。你可以暗示它们为零,但如果是这种情况,那么你必须明确地声明它们是这样的,并且使用可以处理它的编号系统 - 计算机不善于理解隐含的意图。至于检测你什么时候会遇到这个问题,你需要做的就是找出它们是否具有相同的指数(假设一个标准化尾数+/- 1或相似的二进制等价物)。如果它们没有被标准化,那么你需要将它们标准化以进行比较,或者使用与指数相比稍微复杂的比较。
精度和准确度是不一样的东西......
- 亚当