std:numeric_limits <double> :: epsilon定义

Gui*_*e07 8 c++ double

numeric_limits::espilon返回1和下一个double之间的差值.那么,我是否应该理解两个相邻双打之间的距离并不总是相同,例如在2和下一个双精度之间?

如果是,我可以解释一下吗?

Meh*_*dad 16

随着距离零越来越远,浮点数的"密度"会减少很多.

这是因为IEEE浮点数基本上以科学计数法存储,因此范围优于统一精度.(如果它是统一的精度,它将是定点,而不是浮点.)

换句话说,数字以" 有意义"*2 指数的形式存储,因此如果指数变大,则有效数的小变化会导致数字发生较大变化(反之亦然).

所以不,你不能假设2和下一个双重之间的差异与epsilon相同; 事实并非如此.

  • 值得指出的是,这是一种有意识的设计选择:在零附近具有高精度通常是有用的,而对于更大的数字我们更宽容.所以float/double是一个很好的全方位数据类型,它通常*在精确,小数和大,但不太精确的数据类型上足够好.它试图使一个简单的32位或64位宽数据类型尽可能广泛使用.无论如何,+1来自我 (2认同)