已签名的NaN值

5
根据“IEEE”规范: “当输入或结果为NaN时,此标准不解释NaN的符号。” 然而,printfNaN值打印为带符号的:nan-nan。 有人能指出什么规则(从规范中?)会打印nan-nan吗? 例如,我检查了printf(-1.0f),它打印了-nan。 谢谢

11
你的 printf() 示例没有任何意义。 - unwind
1个回答

9
底层表示NaN包含一个符号位,这是printf在决定是否应该打印负号时查看的内容。
标准之所以规定应忽略符号位,是为了允许像取反绝对值这样的操作仅修改符号位,而无需强制检查输入值是否为NaN。

请问您能否指导我在规格说明书或(某些)手册中的具体位置。 - YAKOVM
当然,维基百科的文章详细介绍了底层表示:http://en.wikipedia.org/wiki/IEEE_754-1985 - Lindydancer
我在那里没有看到任何关于-nan与nan的态度。该文档涉及算术,而不是打印。 - YAKOVM
2
如果底层表示中的符号位被设置,那么这个特定的 printf 实现会打印 -nan。没有标准规定它必须或不应该这样做。C 标准没有指定使用特定的浮点实现,也没有规定 NaN 的行为方式。 - Lindydancer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接