十六进制浮点值的目的?

时间:2014-02-19 14:06:08

标签: floating-point hex

搜索后我发现的一切都是如何使用它们。我真的很好奇为什么。使用十六进制格式的浮点值有什么好处?

编辑澄清:

我正在学习获得Zend PHP工程师证书。在其中一个练习测试中,它会发布一些带有少量变量的代码,做一些基本的数学运算,然后询问输出是什么。其中一个变量集是“0xFF”。据我所知,它代表255.0作为浮点值。

所以,我的问题是这是什么时候

0xfed01

比这更好用

1043713

2 个答案:

答案 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)

有关浮点转换及其二进制和十六进制布局的更多信息,您可以查看crackNum

在 debian 兼容系统上安装就像

apt-get install haskell-cracknum-utils