由于微控制器的精确性,我定义了一个包含两个浮点数的比率的符号,而不是直接写出结果。
#define INTERVAL (0.01F/0.499F)
而不是
#define INTERVAL 0.02004008016032064F
但是第一个解决方案添加了另一个操作" /"。如果我们通过优化和正确的结果来推断,最佳解决方案是什么?
答案 0 :(得分:2)
它们是相同的,您的编译器将在编译时评估0.01F/0.499F
。
您的常量值0.01F/0.499F = 0.02004008016032064F
中存在错误。
答案 1 :(得分:1)
0.01F/0.499F
在编译时进行评估。编译时使用的精度取决于编译器,可能超过微控制器。因此,任何一种方法通常都会提供相同的代码。
在不可能的情况下,编译器的精度与微控制器的float
和典型的二进制浮点大致相同,值0.01F
和{{1}不会精确但在0.5 ULP(最后一个单位)内。然后,商0.499F
将在大约sqrt(2)* 0.5 ULP内。使用0.01F/0.499F
将在0.5 ULP内。因此,在选择情况下,常数将优于商。
在更罕见的情况下,0.02004008016032064F
精度将超过float
且商数会更好。
最后,建议编码用于驱动等式的任何值。例如如果0.02004008016032064F
0.01
是两个电阻的值,请使用这两个值。