Floating point C浮点:x/x是否可以>;1.0?

Floating point C浮点:x/x是否可以>;1.0?,floating-point,floating-point-precision,Floating Point,Floating Point Precision,在C语言中,如果你有一个数字被它自己除,你能超过1.0吗?基本上,x/x(例如5.1/5.1)最终会大于1.0吗?x可以是浮点数、双精度或长双精度。请注意,x/x不是文字代码,就像变量x本身一样 我试图搜索这个答案,但很难找到好的搜索词。假设符合IEEE-754标准,x/x总是精确地1.0*,因为除法是一种正确的四舍五入基本运算,这意味着它返回最接近“无限精确”数学值的浮点数 然而,也有一些问题。例如,如果FLT_EVAL_METHOD在您的C实现中是非零的,并且x实际上是一个类似(a+b)/(

在C语言中,如果你有一个数字被它自己除,你能超过1.0吗?基本上,x/x(例如5.1/5.1)最终会大于1.0吗?x可以是浮点数、双精度或长双精度。请注意,x/x不是文字代码,就像变量x本身一样


我试图搜索这个答案,但很难找到好的搜索词。

假设符合IEEE-754标准,
x/x
总是精确地
1.0
*,因为除法是一种正确的四舍五入基本运算,这意味着它返回最接近“无限精确”数学值的浮点数

然而,也有一些问题。例如,如果
FLT_EVAL_METHOD
在您的C实现中是非零的,并且
x
实际上是一个类似
(a+b)/(a+b)
的表达式,那么可以想象(不太可能,但已经观察到)在某些优化设置下,结果可能不完全等于
1.0
。当然,如果您的编译器不符合IEEE-754,那么所有的赌注都没有了


[*]或NaN,如果x为零或无穷大或NaN。

这里可能有1000个关于浮点精度的现有问题。还有一个必须的链接,我很清楚浮点运算的问题,因此是一个特殊的问题。搜索这个特定问题的答案的问题是,我得到了大量的“不要做(5/2==2.5)”。我知道这一点,但很难确定一个数字本身是否不等于1.0(可能是因为类型提升的不同,或者谁知道是什么)。我正在阅读您发送的链接,但它看起来不太有希望。@KenWhite您链接到的文档与此处提出的特定问题无关。它描述了x/x在IEEE 754或类似于IEEE 754的浮点算法中是如何精确地为1.0的。问题是C语言中会发生什么。整个问题取决于C编译器实现IEEE754算法的能力,而您链接到的文档中没有提到这一点。一个100页的链接只提供一句话可以概括的相关信息是没有帮助的。你到底在问什么?“注意x/x不是文字代码,就像变量x本身”是什么意思?@Ryan:什么样的人?人类知道浮点运算是如何工作的吗?
x/x
可以是
1.0
或NaN。(两者都不大于
1.0
)@StephenCanon谢谢。这正是我想要的。我正在做线性插值:
(x-从最小值)/(从最大值-从最小值)*(到最大值到最小值)+到最小值
;你的回答似乎表明我最终的结果可能略大于
到_max
,也可能小于
到_min
。据你所知,这是对的吗?@LeviMorrison你的评论根本不是评论,而是一个新问题(答案是肯定的,您的计算结果可能会大于
到_max
,这并不是因为FLT_EVAL_方法,如果已知该方法为非零,它实际上会有所帮助,而是因为通常使用浮点算法。请参阅类似示例)