表示小于1的最高浮点数量

edA*_*a-y 14 c c++ math

我正在做一些舍入计算并发生了一个问题.对于给定的浮点类型,如何表示小于1的最大数量?

也就是说,我怎么写/代表值x,使得x < 1, x + y >= 1任何y > 0.

在级分,这将是x = (q-1)/q其中q精确的类型.例如,如果您以1/999增量计数,那么x = 998/999.

对于给定的类型(float,double,long double),如何x在代码中表达值?


我也想知道这个值是否真的存在于所有的值中y.也就是说,随着y's指数变小,也许这种关系不再成立.因此,对某些范围限制的答案y也是可以接受的.(x我想要的价值仍然存在,这种关系可能无法正确表达.)

qrd*_*rdl 12

C99定义了nextafter()功能.像它一样使用它

#include <math.h>
double under_one = nextafter(1, 0);
Run Code Online (Sandbox Code Playgroud)


Vov*_*ium 5

Altouht 其他人认为更大的值小于1is 1-FLT_EPSILON,在浮点数中它不能满足x < 1, x + y >= 1any 的y > 0条件,除非您使用四舍五入。

原因是 1 和它之前的距离(FLT_EPSILON约 1.2E-7)远大于可表示的最小正数FLT_MIN,即约 1.2E-38。因此,存在一类数字(FLT_MIN ... FLT_EPSILON/2四舍五入到最接近的数字时,这是大多数系统的默认设置),其中(1-FLT_EPSILON)+y == (1-FLT_EPSILON) < 1.