提问人:GKxx 提问时间:10/15/2023 最后编辑:GKxx 更新时间:10/16/2023 访问量:70
什么时候浮点正零不是全位零?
When is the floating-point positive zero not all-bit zero?
问:
在 C 语言中,空初始化将浮点变量初始化为正零。它说
(在空指针值和浮点零具有全位零表示形式的平台上,这种形式的静态初始化通常是通过在程序映像的 .bss 部分中分配它们来实现的)
那么,使正零不是全位零的实际平台或浮点格式是什么?
答:
1赞
chux - Reinstate Monica
10/16/2023
#1
什么时候浮点正零不是全位零?
在 OP 的问题中有一个隐藏的假设,即只有 1 个浮点正零编码。
在 201x 之前,CCS 是嵌入式目标的良好编译器。它使用了一个非IEEE浮点数
:
第 1 字节:8 位偏置指数 第
2 字节:符号位和 7 MS 尾数位 第
3 字节:尾数多 8 位
第 4 字节:8 LS 尾数位
它不支持次正态。任何 00-XX-XX-XX 都是“零”。
类似的代码将使用全零位模式生成正零。float x = 0.0;
x
uint32_t y = 0x001122; memcpy(&x, &y, 4);
将使用非零位模式生成正零。x
一个更狭隘的问题如下,它更好地解决了OP的担忧。
什么时候浮点初始化为正零而不是全位零?
评论
= {}