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

标签 c overflow detection gmp

问的问题与尾数有关,而不是 exponent ,这与我本周早些时候提出的关于 "missing" digits on the sum of two negative floats. 的问题有很大关系。

鉴于尾数具有可变精度,如何判断是否已溢出尾数的当前精度设置?或者,从主动的角度来看,如何判断是否可能发生尾数精度溢出?

亲切的问候, 布鲁斯。

最佳答案

有一些数值方法可以查看您是否会失去精度,但底线是您需要更好地理解精度的定义。

-4939600281397002.2812

-4939600281397002.2812000000000000

不是同一个数字。

添加时

-2234.6016114467412141

-4939600281397002.2812

总的来说,正确的输出将只有 20 位精度,因为较小数字中的额外 12 位数字是没有意义的,因为较大数字中的 12 个类似大小的数字是未知的。您可以暗示它们为零,但如果是这种情况,那么您必须明确声明它们是零,并使用可以处理它的编号系统 - 计算机不擅长理解隐含的意图。

就检测何时会遇到此问题而言,您需要做的就是查明它们是否具有相同的指数(假设归一化尾数 +/- 1 或类似的二进制等价物)。如果它们未归一化,则您需要对它们进行归一化以进行比较,或者使用稍微复杂一些的指数比较。

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

-亚当

关于c - 如何在发生之前或之后检测 GMP 中的尾数精度溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472652/

相关文章:

javascript - firefox (9), javascript, 由于大数据文件导致分配大小溢出。有没有办法避免这种情况?

opencv - 使用 OpenCV 在 Objective-C++ 中播种和霍夫圆

ffmpeg 场景检测 : check only every nth frame?

detection - 检测强连通分量中的所有简单循环(复杂性)

c - 为什么我的for循环不退出?

c - 计算CS50练习中的硬币变化困难

c# - 在 C# 和 C 之间进行进程间通信的最简单方法是什么?

c - 为什么 strcpy 不能正常工作

java - 对点间隔执行二进制搜索

css - 让 div 在 IE8 中有底部滚动条 - 尝试 2?