std::max() 函数与定点实现比较中的问题

issue in std::max() function comparision with fixed point implementation

是否有任何可用的标准函数可以帮助我比较两个浮点值之间的 max()min()

我已经为这个 min()max() 函数编写了从 q0s32q32s0 类型(33 种类型)的定点实现。

但我想用 std:min()std::max() 函数测试我的函数的精度损失。但是标准函数的结果并不好。

我试过这种方法,但对我没有用,因为结果不符合预期。

代码:

float num1 = 4.5000000054f;
float num2 = 4.5000000057f;

float resf = std::max(num1,num2);
printf("Result is :%20.15f\n",resf);
printf("num1 :%20.15f and num2 :%20.15f\n",num1,num2);

输出:

Result is :   4.500000000000000
num1 :   4.500000000000000 and num2 :   4.500000000000000

大多数 c++ 实现使用 IEEE 754 标准进行浮点运算。 Here 是关于此问题的一些有用信息

在 IEEE 754 中 float 是一个 32 位单精度浮点数(1 位用于符号,8 位用于指数,23* 用于值),即浮点数有 7 位小数 精度。

在 IEEE 754 double 中是一个 64 位双精度浮点数(1 位用于符号,11 位用于指数,52* 位用于值),即 double 有 15 个十进制数字 的精度。

您需要使用 double 来获得想要的结果。