Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4058|回復: 5
打印 上一主題 下一主題

為什麼是 6, 不是 7 ?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-12-6 00:57:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 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. }
複製代碼
2#
發表於 2012-12-8 09:41:55 | 只看該作者
試試把這行:

int BT = 0;

改成:

float BT = 0;
3#
發表於 2012-12-10 22:15:15 | 只看該作者
比較好其為何為BT用int不行,用float就可以。
4#
 樓主| 發表於 2012-12-10 23:43:16 | 只看該作者
比較好其為何為BT用int不行,用float就可以。
pkduke2003 發表於 2012-12-10 22:15




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

老外的說法: 因為 pow 產生的是近似於數學次方的結果,也就是說 pow(2, 2) 結果可能是 3.999999999
但是當 float 轉成 int 時,分數的部份也會被截掉,即使分數是 .999999999
6#
發表於 2013-2-10 23:30:51 | 只看該作者
想要用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;
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2025-1-31 16:49 , Processed in 0.150788 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表