我为开发人员创建了一个函数,用于从字符串读取浮点数(IEEE 754二进制32位)。我已经完成了所有的工作,但我想知道如果用户/或程序员输入了一个没有指定QNaN或SNaN的字符串,比如“QNaN”或SNaN,那么应该考虑什么呢?还是应该将"NaN“视为无效输入,并且只接受"QNaN”或"SNaN"?
发布于 2019-05-21 09:21:37
首先,您应该注意到,当禁用浮点异常时,信令NaN (SNAN)的行为与静音NAN (QNAN)相同。通常他们都是残疾人。
如果文件中的"NaN“意为”丢失数据“,则使用QNAN。
如果"NaN“是您的文件被认为意味着”这必须用适当的数据初始化以后“使用SNAN。
在后一种情况下,如果数据被(意外地)读取并输入到计算中,将生成异常(当然,如果启用的话)。但是,在这样做时(启用了异常),您必须确保所有其他FP计算都不会在常规计算期间生成NaN,并且/或需要实现正确的异常处理。当然,你失去了FP数学的优势,即是代数封闭的,也就是能够以一种无异常的方式工作。
FP异常的一个问题是,在大多数编程语言中,异常是不可持续的,而在FP世界中,这是不必要的(在异常之后,代码可以继续)。这有点太严格了。
我个人建议你使用QNAN。
https://softwareengineering.stackexchange.com/questions/392179
复制相似问题