正确实施strtod?
发布时间:2020-12-16 06:57:09 所属栏目:百科 来源:网络整理
导读:简单的问题:1.15507e-173的正确位表示是什么,双精度? 完整的问题:如何确定正确解析此数字? 背景:我的问题从this answer开始,它显示了来自三个不同解析器的两个不同的位表示,即 0x1c06dace8bda0ee0 和 0x1c06dace8bda0edf 我想知道哪个解析器已经正确.
简单的问题:1.15507e-173的正确位表示是什么,双精度?
完整的问题:如何确定正确解析此数字? 背景:我的问题从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",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 鉴于两者都偏离同一侧,因此正确的表示是第一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |