edA*_*a-y 2 floating-point ieee-754
是否保证浮点:
(a <= b) 暗示 !(b > a)!(a <= b) 暗示 b > a我目前正在处理跨语言,但如果需要,你可以假设一个float或double一个C,C++或C#.假设没有NaN参与.
我认为IEEE的规则适用于此.我不确定他们的订购规则是否意味着上述内容.
我特别关注的是,a并且b并不总是相同的变量,而是相同的值.它们总是来自完全相同的计算.但是,由于比较是在不同的代码位置完成的,我不能保证它们是否总是存储/截断的形式(最终可能具有扩展的精度).
因为我正在寻找保证,答案应包括提供这些保证的参考,或正式/强烈暗示保证.
根据IEEE 754(2008)标准(第5.11节):
四种相互排斥的关系是可能的:小于,等于,大于和无序.当至少一个操作数是NaN时,出现最后一种情况.每个NaN都应该将无序与包括其自身在内的所有东西进行比较.比较应忽略零的符号(所以+0 = -0).相同符号的无限操作数应相等.
所以是的,假设两个参数都不是NaN,那么这两个语句都是正确的.
至于隐式扩展精度格式的使用,问题是允许这些意味着它不再严格遵循IEEE 754标准.看到这个关于实现严格合规性的优秀答案和讨论.
更新:根据我的理解,如果你使用的是最近的标准(例如-std=c99),那么你不必担心中间精度,只要你比较的东西是声明变量(例如double a = 0.1; if (a < b) ...)而不是常量(例如if (0.1 < b) ...) .