754 IEEE FP标准符合我为什么要这样做的符号,并未定义以下行为:

问题描述 投票:0回答:1
我如何手动设置等于nan的浮子的位值?

基本上,是否存在NAN的有效载荷影响铸件的输出? thanks!

	

浮点数铸件到整数的结果未定义/未指定,对于不在整数变量范围内的值(截断为±1)。

节6.3.1.4:

当真实浮动类型的有限值转换为除

_Bool

以外的整数类型时,分数部分被丢弃(即,该值向零截断)。如果整数类型无法表示积分部分的值,则行为是不确定的。

如果实现定义

__STDC_IEC_559__

c floating-point nan
1个回答
21
投票
如果浮动值是无限的或NAN,或者浮动值的整体部分超过整数类型的范围,则“无效”浮动 - 提高点例外,未指定结果值。

(附件F [规范],点4)

如果实现未定义
_BOOL

,则所有下注均未关闭。


有这种行为的原因,但这不是您通常应该依靠的。
您注意到,IEEE-754并未指定将浮点NAN转换为整数时会发生什么,除了它应该提出无效的操作异常,您的编译器可能会忽略。 C标准使行为不确定,这不仅意味着您不知道会得到什么整数结果,而且您不知道您的程序将做什么;该标准允许该程序中止或获得疯狂的结果或做任何事情。您可能在英特尔处理器上执行了此程序,并且您的编译器可能使用内置说明进行了转换。英特尔非常仔细地指定指令行为,而将浮点NAN转换为32位整数的行为是返回0x80000000,而不论NAN的有效载荷如何,这就是您观察到的。

由于英特尔指定了指令行为,如果您知道使用的说明,则可以依靠它。但是,由于编译器没有为您提供此类保证,因此您不能依靠所使用的指令。


首先,根据IEEE标准,NAN是所有事物都不认为是浮点数。 
因此,这可能是几件事。在编译器中,我与Nan和-nan合作,因此不仅仅是一个值。

秒,每个编译器都有其一组功能可以测试此案,因此程序员不必亲自处理零件。总而言之,我认为窥视价值不会有任何不同。您可能会窥视价值以查看其IEEE构造,例如标志,Mantissa和Exponent,但再次,每个编译器都提供了自己的功能(或更好地说,图书馆)来处理它。

我确实有更多关于您的测试的话。

__STDC_IEC_559__

铸造您的确会truce float将其转换为int。如果你想得到 浮子代表的整数,执行以下

isnan

也就是,您将浮子的地址称为int的指针,最终将其称为int值。这样,保留了位表示。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.