Robofun 機器人論壇
標題:
為什麼是 6, 不是 7 ?
[打印本頁]
作者:
pizg
時間:
2012-12-6 00:57
標題:
為什麼是 6, 不是 7 ?
本帖最後由 pizg 於 2012-12-7 08:58 編輯
請問各位前輩,
下列程式print出來的結果為什麼是 6, 而不是 7 ?
int B[]={1,1,1,0,0,0,0,0,0,0};
void setup() {
Serial.begin(9600);
int n = sizeof(B) / 2;
int BT = 0;
for(int i=0;i < n; i++) {
BT = BT + B[i] * pow(2, i);
}
Serial.println(BT);
}
void loop() {
}
複製代碼
作者:
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