std::max() 函数与定点实现比较中的问题
issue in std::max() function comparision with fixed point implementation
是否有任何可用的标准函数可以帮助我比较两个浮点值之间的 max()
或 min()
?
我已经为这个 min()
和 max()
函数编写了从 q0s32
到 q32s0
类型(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
来获得想要的结果。
是否有任何可用的标准函数可以帮助我比较两个浮点值之间的 max()
或 min()
?
我已经为这个 min()
和 max()
函数编写了从 q0s32
到 q32s0
类型(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
来获得想要的结果。