Robofun 機器人論壇

標題: 為什麼是 6, 不是 7 ? [打印本頁]

作者: pizg    時間: 2012-12-6 00:57
標題: 為什麼是 6, 不是 7 ?
本帖最後由 pizg 於 2012-12-7 08:58 編輯

請問各位前輩,
下列程式print出來的結果為什麼是 6, 而不是 7 ?


  1. int B[]={1,1,1,0,0,0,0,0,0,0};

  2. void setup() {
  3.   Serial.begin(9600);
  4.   int n = sizeof(B) / 2;
  5.   int BT = 0;
  6.   for(int i=0;i < n; i++) {
  7.     BT = BT + B[i] * pow(2, i);
  8.   }
  9.   Serial.println(BT);
  10. }

  11. void loop() {
  12. }
複製代碼

作者: coopermaa    時間: 2012-12-8 09:41
試試把這行:

int BT = 0;

改成:

float BT = 0;
作者: pkduke2003    時間: 2012-12-10 22:15
比較好其為何為BT用int不行,用float就可以。
作者: pizg    時間: 2012-12-10 23:43
比較好其為何為BT用int不行,用float就可以。
pkduke2003 發表於 2012-12-10 22:15




是啊, 我也想知道為什麼用int不行.
cooper老師,
如果一定要用int型態的話應該要如何改寫?
作者: coopermaa    時間: 2012-12-11 00:52
這裏有討論串:
http://8515.avrfreaks.net/index. ... t=80319&start=0

老外的說法: 因為 pow 產生的是近似於數學次方的結果,也就是說 pow(2, 2) 結果可能是 3.999999999
但是當 float 轉成 int 時,分數的部份也會被截掉,即使分數是 .999999999
作者: alibuda174    時間: 2013-2-10 23:30
想要用int的話,把pow改用底下這個ipow吧。

int ipow(int base, int exp)
{
    int result = 1;
    while (exp)
    {
        if (exp & 1)
            result *= base;
        exp >>= 1;
        base *= base;
    }

    return result;
}




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2