gpt4 book ai didi

.net - C double 与 .NET double 不同吗?

转载 作者:太空狗 更新时间:2023-10-29 16:48:16 25 4
gpt4 key购买 nike

比较一些 C 代码和我试图替换它的 F#,我发现最终结果存在一些差异。

通过备份代码,我发现即使存在差异 - 尽管差异很小。

代码首先从文件中读取数据。第一个数字的结果不同。例如,在 F# 中(更易于编写脚本):

let a = 71.9497985840
printfn "%.20f" a

我得到了预期的(对我来说)输出 71.94979858400000000000

但是在 C 中:

a =  71.9497985840;
fprintf (stderr, "%.20f\n", a);

打印出 71.94979858400000700000

那 7 从何而来?

差别很小,但我不知道为什么,这让我很困扰。 (这也让我很困扰,因为这让我更难追踪我的两个版本的代码在哪里出现分歧)

最佳答案

这是打印的区别。将该值转换为 IEEE754 double 产量

Prelude Text.FShow.RealFloat> FD 71.9497985840
71.94979858400000694018672220408916473388671875

但是表示 71.949798584 足以将数字与其邻居区分开来。 C,当要求在小数点后以 20 位精度打印时,将值正确四舍五入为所需的位数,显然 F# 使用最短的唯一确定表示并用所需的 0 数填充它,就像 Haskell 一样.

关于.net - C double 与 .NET double 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com