基本上,是否存在NAN的有效载荷影响铸件的输出? thanks!
浮点数铸件到整数的结果未定义/未指定,对于不在整数变量范围内的值(截断为±1)。
节6.3.1.4:_Bool
以外的整数类型时,分数部分被丢弃(即,该值向零截断)。如果整数类型无法表示积分部分的值,则行为是不确定的。
如果实现定义__STDC_IEC_559__
(附件F [规范],点4)
如果实现未定义
您注意到,IEEE-754并未指定将浮点NAN转换为整数时会发生什么,除了它应该提出无效的操作异常,您的编译器可能会忽略。 C标准使行为不确定,这不仅意味着您不知道会得到什么整数结果,而且您不知道您的程序将做什么;该标准允许该程序中止或获得疯狂的结果或做任何事情。您可能在英特尔处理器上执行了此程序,并且您的编译器可能使用内置说明进行了转换。英特尔非常仔细地指定指令行为,而将浮点NAN转换为32位整数的行为是返回0x80000000,而不论NAN的有效载荷如何,这就是您观察到的。_BOOL
,则所有下注均未关闭。
有这种行为的原因,但这不是您通常应该依靠的。
由于英特尔指定了指令行为,如果您知道使用的说明,则可以依靠它。但是,由于编译器没有为您提供此类保证,因此您不能依靠所使用的指令。
首先,根据IEEE标准,NAN是所有事物都不认为是浮点数。 因此,这可能是几件事。在编译器中,我与Nan和-nan合作,因此不仅仅是一个值。秒,每个编译器都有其一组功能可以测试此案,因此程序员不必亲自处理零件。总而言之,我认为窥视价值不会有任何不同。您可能会窥视价值以查看其IEEE构造,例如标志,Mantissa和Exponent,但再次,每个编译器都提供了自己的功能(或更好地说,图书馆)来处理它。我确实有更多关于您的测试的话。
__STDC_IEC_559__
铸造您的确会truce float将其转换为int。如果你想得到 浮子代表的整数,执行以下
isnan
也就是,您将浮子的地址称为int的指针,最终将其称为int值。这样,保留了位表示。