搜索后我发现的一切都是如何使用它们。我真的很好奇为什么。使用十六进制格式的浮点值有什么好处?
编辑澄清:
我正在学习获得Zend PHP工程师证书。在其中一个练习测试中,它会发布一些带有少量变量的代码,做一些基本的数学运算,然后询问输出是什么。其中一个变量集是“0xFF”。据我所知,它代表255.0作为浮点值。
所以,我的问题是这是什么时候
0xfed01
比这更好用
1043713
答案 0 :(得分:8)
C具有十六进制浮点常量,形式以“0x”开头,然后是十六进制数字,可选地包括小数点,然后是“p”,然后是十进制的带符号指数,它是2的幂。例如,0x1.fp-2是(1 + 15/16)•2 -2 = .484375。
十六进制浮点常量使编译器可以轻松地重现精确值。
使用十进制常量,将十进制数转换为二进制浮点存在一些困难。这是因为某些值可能非常接近于值向上或向下取整的点,具体取决于尾随数字。并且可能难以对此进行算术,因为数值算术受到舍入误差的影响。尝试避免舍入错误,同时计算涉及通常由浮点格式表示的数字的精确值,需要仔细工程。
这是一个已解决的问题(Correctly Rounded Binary-Decimal and Decimal-Binary Conversions by David M. Gay, 1990)。但是,有些编译器没有正确实现它。程序员更容易编写代码来转换十六进制浮点,因为它很好地符合二进制格式:通过检查几个单独的数字,您可以轻松判断数字是否高于或低于舍入点;不需要涉及算法来加剧舍入误差。
通常,担心浮点精度的软件工程师会通过使用特殊软件(例如,Maple或Mathematica或他们自己的自定义任务特定软件或a)生成十六进制浮点常量,以便在程序中使用它们。组合)。
还可以通过指定其内部表示来创建浮点常量,例如通过创建无符号整数和浮点对象的并集,并使用整数的十六进制值初始化并集。这需要了解浮点值的编码格式。应该很少这样做。通常它仅用于特殊目的,例如使用有效负载准备NaNs并使用执行专门浮点操作的软件。
答案 1 :(得分:0)