【发布时间】:2014-11-23 13:31:13
【问题描述】:
我正在 Arduino 上编写计算器,我正在尝试计算 pow 并将其写入字符串(结果)。这是我的代码:
dtostrf(exp(n*log(x)), 0, 5, result); // x ^ n
2 ^ 2 = 4.00000 // works fine
10 ^ 5 = 99999.9770 // should be 100000
我的代码有什么问题,我怎样才能始终得到正确的结果? 我的意思是如何舍入它但仍然可以使用双打(例如 5.2 ^ 3.123)
【问题讨论】:
-
查看this question的答案。
-
Arduino Uno 有一个非常简单的处理器,没有任何浮点支持。结果是 double 根本不是双精度的,它需要 4 个字节并且在软件中以单精度模拟。精度的损失当然是不可避免的,你永远不能指望超过 6 个精确数字。为此类问题寻找解决方案是 Arduino 爱好者忙碌的原因。
-
好的,这意味着我可以使用浮点数而不是双精度数?
-
不,
float也是 4 个字节。在到期时,double将比float提供更高的精度;在 Uno 上,它们将是相同的。float永远不会比double有更多的精度。