2013-07-11 34 views
1

我想實現基於C爲什麼涉及指數的C計算會產生錯誤的答案?

enter image description here

這裏下面的公式是我的代碼:

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

任何人都可以解釋我做錯了什麼?

+5

整數除法... – Mysticial

+2

(((252-1)/(253/3))-1)==((251/84)-1)==(2- 1)== 1. 10^1 == 10.好的舊整數除法。 – Mike

+4

爲什麼downvote?這個問題很簡單。 –

回答

7

注意,在這條線

(((x-1)/(253/3))-1)) 

你是一個整數值253/3除以整數值x - 1。這會將值截斷爲int,這意味着您將提升整數功率爲整數倍。

要解決這個問題,嘗試改變這種表達

(((x-1)/(253.0/3.0))-1)) 

現在,這將在表達式中使用double S,給你你想要的值。

希望這會有所幫助!

+0

非常感謝你 –

+3

「這向下舍入」 - 不,它不是:它是在C89中實現定義的,並在C99中截斷。 – 2013-07-11 18:34:35

+0

@ H2CO3-感謝您指出。我會相應地更新我的答案。 – templatetypedef

0

此外,整數不會給你數字的小數部分,所以像3.5這樣的數字將被減少到3使用整數。要解決這個問題,就要走了。換句話說,3不同於3.0

相關問題