Floating point 能否保证双值A/B始终等于A/B?

Floating point 能否保证双值A/B始终等于A/B?,floating-point,double,ieee-754,Floating Point,Double,Ieee 754,正如我们所知,由于double的精度有限,以下两种计算可能不会给出完全相同的值: A/B/C和 A/(B*C) 我的问题是,即使使用相同的两个变量A和B,编译器能否保证每次A/B都产生相同的值 或者我应该在代码中询问,我们能否保证以下语句始终返回true: 如果(A/B==A/B)编译器的行为保证需要一些指定行为的文档。因此,答案取决于编程语言,如果编程语言的规范不充分,答案取决于使用的特定编译器 这个问题没有确定任何特定的编程语言,更不用说任何特定的编译器了。一些编程语言的标准规定了其行为的许

正如我们所知,由于double的精度有限,以下两种计算可能不会给出完全相同的值:

A/B/C和 A/(B*C)

我的问题是,即使使用相同的两个变量A和B,编译器能否保证每次A/B都产生相同的值

或者我应该在代码中询问,我们能否保证以下语句始终返回true:


如果(A/B==A/B)

编译器的行为保证需要一些指定行为的文档。因此,答案取决于编程语言,如果编程语言的规范不充分,答案取决于使用的特定编译器

这个问题没有确定任何特定的编程语言,更不用说任何特定的编译器了。一些编程语言的标准规定了其行为的许多方面,而一些编程语言是非正式的,不能清楚地记录行为

在后一类中,Python说浮点行为是从它运行的任何平台派生的。因此,我们很难确定Python将做什么

对于浮点行为,目前还不完全清楚。我开始寻求澄清,到目前为止,我的解释是该标准应该被解释为要求实现使用他们选择的一种格式来评估特定类型的浮点操作,但编译器在历史上并没有遵循这一点。例如,较旧版本的GCC可以使用扩展精度计算表达式,但在不可预测的时间转换为标称精度。这可能会导致
A/B==A/B
计算结果为false(甚至不包括NaN,我在这里假设NaN是为了讨论的目的)


关于浮点运算更为具体,并指定了与IEEE 754的一致性,但它指定了FP严格模式和非FP严格模式,粗略检查表明非FP严格模式可以允许
a/B
a/B
比较不相等,哪种编程语言?