我想问的问题是尾数,而不是exponent,与我本周早些时候提出的关于"missing" digits on the sum of two negative floats.的问题有很大关系。
考虑到尾数具有可变的精度,如何判断尾数是否超出了尾数当前的精度设置?或者,从积极的一面来看,如何判断尾数精度溢出的可能性?
好样的,布鲁斯。
发布于 2009-01-30 07:06:36
有一些数值方法可以看你是否会失去精度,但底线是你需要更好地理解精度的定义。
-4939600281397002.2812
和
-4939600281397002.2812000000000000
不是同一个号码。
当你加入
-2234.6016114467412141
和
-4939600281397002.2812
加在一起,正确的输出将只有20位的精度,因为更小的数字中的额外的12位数是毫无意义的,因为在较大的数字中的12位相同大小的数字是未知的。你可以暗示它们是零,但是如果是这样的话,你必须显式地声明它们为零,并且使用一个能够处理它的编号系统--计算机不善于理解隐含的意图。
至于检测什么时候会出现这个问题,您需要做的就是找出它们是否具有相同的指数(假设归一化尾数+/- 1或类似的二进制等价物)。如果它们没有标准化,那么您需要对它们进行规范化比较,或者使用稍微复杂一些的指数比较。
精确和精确不是一回事..。
-Adam
https://stackoverflow.com/questions/472652
复制相似问题