gpt4 book ai didi

正确的 strtod 实现?

转载 作者:太空狗 更新时间:2023-10-29 15:41:19 28 4
gpt4 key购买 nike

简单的问题:数字 1.15507e-173 的 double 正确位表示是什么?完整问题:如何确定这个数字的正确解析?

背景:我的问题来自 this answer它显示了来自三个不同解析器的两个不同的位表示,即

0x1c06dace8bda0ee0

0x1c06dace8bda0edf

而且我想知道哪个解析器做对了。

更新 the C99 specification 的第 6.4.4.2 节说对于 C 解析器,

"...the result is either the nearest representable value, or the larger
or smaller representable value immediately adjacent to the nearest
representable value, chosen in an implementation-defined manner."

这意味着解析的数字不需要是最近的,甚至不需要是两个相邻的可表示数字之一。 7.20.1.3 中的相同规范指出 strtod() 的行为方式与内置解析器基本相同。感谢指出这一点的回答者。

另见 this answer类似的问题,和this blog .

最佳答案

:= num1 = ImportString["\.1c\.06\.da\.ce\.8b\.da\.0e\.e0", "Real64", ByteOrdering->1] // First;:= num2 = ImportString["\.1c\.06\.da\.ce\.8b\.da\.0e\.df", "Real64", ByteOrdering->1] // First;:= SetPrecision[num1, Infinity]-numOr //N:= numOr =  SetPrecision[1.15507, Infinity] * 10^-173;             -190= -6.65645 10:= SetPrecision[num2, Infinity]-numOr //N             -189= -2.46118 10

鉴于两者都偏离同一侧,因此正确的表示是第一个。

关于正确的 strtod 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6924867/

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