我在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)
答案 0 :(得分:0)
您只是遇到了舍入错误。关于这一点你无能为力,除非输入是整数时恢复为基于整数的方法。
您可以判断输入是否为整数,如果是,则使用整数运算;如果没有,那么使用双打。但是使用exp
和log
将始终引入舍入错误,因此您无法通过该方法获得准确答案。
更确切地说,要使用整数运算,您需要将base作为整数,将指数作为非负整数。
答案 1 :(得分:0)
由于您正在编程计算器,速度不是您关注的问题,而是可靠数字的数量。因此,您可以尝试使用双精度库。它使用64位双精度但在16MHz CPU时钟时只有大约200 FLOPS,而在高阶计算(如exp(),log()或sin())则更少。因此,在键入数字并按下输入按钮后需要一秒钟,但旧的基于8位的袖珍计算器也是如此。