【发布时间】:2020-01-29 15:49:29
【问题描述】:
是否有任何可用的标准函数可以帮助我比较两个浮点值之间的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
【问题讨论】:
-
您的期望是什么?
-
浮点数只有 6-7 位精度。您的 54 和 57 并脱离了可以代表的范围。如果要定点,需要获取或制作定点库,c++
float和double都是浮点类型。 -
如果你要进入浮点数学世界,这是一本必读的书:stackoverflow.com/questions/588004/…
-
您使用浮点数,它们是根据 IEEE754 32 位大小的浮点数。您的值落后于浮点精度
-
4.5000000054 和 4.5000000057 都不能用单精度 IEEE 754 数据类型表示,这可能是您的
float。num1和num2实际上都代表 4.5,这就是你得到的。
标签: c++ floating fixed-point