English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

在網路上看到一個範例
我不懂為什麼a要用float而不是int
它從頭到尾不是都只有用到整數嗎?

/* 求1+1/2+1/3+...+1/n 總和*/
#include
#include
main()
{
int n;
float a,sum=0.0; //a變數代表分母值,sum變數代表累加總和值
cout<<\"求 sum=1+1/2+1/3+...+1/n\\n\";
cout<<\"輸入n值-->\";
cin>>n;
for(a=1.0;a<=n;a++) //for迴圈內sum為1+1/2+...+1/n 總和
{
sum=sum+(1/a);
}
cout<<\"sum=\"< system(\"PAUSE\");
return 0;
}

2006-08-10 10:02:11 · 5 個解答 · 發問者 nydia 2 in 電腦與網際網路 程式設計

Jacob Lee :
a這樣寫下來不是1.0、2.0、3.0、4.0.....嗎?
初始值是1.0,然後每次加1
為什麼你說a是0.5.....?

2006-08-10 10:22:29 · update #1

5 個解答

1/2 = 0.5
1/3 = 0.333 ...
1/4 = 0.25
1/5 = 0.2
1/6 = 0.166...
1/7 = 0.142857...
1/8 = 0.125
1/9 = 0.1111 ...
1/10= 0.1
它們都不是整數!
所以,不能用 int,不是會 warning,是會變成
1/2 = 0
1/3 = 0
...
答案會變成是 1

2006-08-10 10:14:49 · answer #1 · answered by ? 7 · 0 0

基本上上列的宣告為最佳方式
float a,sum=0.0;
為何?
因為若宣告為
int a
則必須改為下列寫法
sum=sum+ (1/(float)a );

問題是出在a變數必須從int轉型成為float迴圈執行期會多了四個指令若為物件轉型則耗費更多週期,因此直接宣告float a 是最簡單與速度最快的方式

以上是敝人的淺見,希望對你有幫助。

2006-08-10 18:03:36 · answer #2 · answered by ㄚ旺 5 · 0 0

Jacob Lee說的沒有錯啊.因你是要求從a=1到a=n所有1/a的合.如果a是個整數的話1/a就是個整數除.如果a是1的話.1/1=1.但是如果a大於1的話那1/a就會是0了.要解這問題的方法很多.其中一種就是把a的型態設定為float.如此1/a就不是整數除,而是小數除.不過個人認為這並不是最好的解法.

2006-08-10 17:07:44 · answer #3 · answered by 7 · 0 0

以上回答的人都沒人說a=0.5呀,Jacob是說1/a的所有過程。

2006-08-10 11:26:43 · answer #4 · answered by Almond 6 · 0 0

因為 sum = sum + (1/a)
float = float + (1/ float)
float = float + (1/ int) ----- 可能會有warnning

2006-08-10 10:05:55 · answer #5 · answered by ? 4 · 0 0

fedest.com, questions and answers