用双精度计算战力会产生错误的结果

时间:2014-11-23 13:31:14

标签: c++ c arduino double pow

我在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)

2 个答案:

答案 0 :(得分:0)

您只是遇到了舍入错误。关于这一点你无能为力,除非输入是整数时恢复为基于整数的方法。

您可以判断输入是否为整数,如果是,则使用整数运算;如果没有,那么使用双打。但是使用explog将始终引入舍入错误,因此您无法通过该方法获得准确答案。

更确切地说,要使用整数运算,您需要将base作为整数,将指数作为非负整数。

答案 1 :(得分:0)

由于您正在编程计算器,速度不是您关注的问题,而是可靠数字的数量。因此,您可以尝试使用双精度库。它使用64位双精度但在16MHz CPU时钟时只有大约200 FLOPS,而在高阶计算(如exp(),log()或sin())则更少。因此,在键入数字并按下输入按钮后需要一秒钟,但旧的基于8位的袖珍计算器也是如此。

请参阅此Link (only in German)