首页 > 解决方案 > Arduino Pow() 和 Armstrong 数问题

问题描述

这是我要运行的代码。我尝试了很多事情,比如我找到了一个用 math.h 做 ceil() 的解决方案,但我真的很想了解为什么即使我做了类似的事情也不起作用

pow((int)j, 3) + pow((int)d, 3) + pow((int)s, 3)

其中 j 为 3,d 为 5,s 为 1;如果我在哪里做

pow(3,3) + pow(5,3) + pow(1, 3) 那么这个条件就成立了。

我知道 sum 是 double 类型,并且Serial.println(sum)说 153.00 我想152.999999是这样的,但是int j = 3;与仅 placin 3 有什么不同,pow()我检查了二进制数据,而 j 实际上是0011d 是0101而 s0001Serial.println(j, BIN);

int n = 100;
float j, d, s;
double sum;
void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(100);
  if (n >= 100 && n < 154) {
    j = n % 10; // 153 % 10 = 3;
    d = n / 10 % 10; // 15 % 10 = 5;
    s = n / 100; // 153 / 100 = 1;

    sum = pow(j, 3) + pow (d, 3) + pow(s, 3);

    if (sum == n) {
      Serial.println(n);
    }

    n++;
  }
}

如果我在这里发现一些错别字,我会更正自己,我只是在这里输入,而不是复制粘贴:)

标签: c++arduinoarduino-uno

解决方案


与仅将 3 放入有何int j = 3;不同pow()

pow(int, int)是与 不同的功能pow(float, float)。这里的质量显然pow(float, float)很弱,只能接近数学上正确的答案。C/C++ 没有为这些函数指定所需的接近度。

可以四舍五入pow(float, float)答案,或者简单地说,对于精确的数学问题,避免浮点数学。


请记住,更好的结果实现可能会以时间性能为代价。你经常得到你付出的代价。


推荐阅读