我想實現基於C爲什麼涉及指數的C計算會產生錯誤的答案?
這裏下面的公式是我的代碼:
int function(int x){
return pow(10, (((x-1)/(253/3))-1));
}
int main(void){
int z = function(252);
printf("z: %d\n",z);
return 0;
}
它輸出。然而一個計算器輸出94.6。
任何人都可以解釋我做錯了什麼?
我想實現基於C爲什麼涉及指數的C計算會產生錯誤的答案?
這裏下面的公式是我的代碼:
int function(int x){
return pow(10, (((x-1)/(253/3))-1));
}
int main(void){
int z = function(252);
printf("z: %d\n",z);
return 0;
}
它輸出。然而一個計算器輸出94.6。
任何人都可以解釋我做錯了什麼?
注意,在這條線
(((x-1)/(253/3))-1))
你是一個整數值253/3
除以整數值x - 1
。這會將值截斷爲int
,這意味着您將提升整數功率爲整數倍。
要解決這個問題,嘗試改變這種表達
(((x-1)/(253.0/3.0))-1))
現在,這將在表達式中使用double
S,給你你想要的值。
希望這會有所幫助!
非常感謝你 –
「這向下舍入」 - 不,它不是:它是在C89中實現定義的,並在C99中截斷。 – 2013-07-11 18:34:35
@ H2CO3-感謝您指出。我會相應地更新我的答案。 – templatetypedef
此外,整數不會給你數字的小數部分,所以像3.5這樣的數字將被減少到3使用整數。要解決這個問題,就要走了。換句話說,3不同於3.0
整數除法... – Mysticial
(((252-1)/(253/3))-1)==((251/84)-1)==(2- 1)== 1. 10^1 == 10.好的舊整數除法。 – Mike
爲什麼downvote?這個問題很簡單。 –