有個疑問,一開始我是設 int y=1; 但發現編譯下去後程式反而跑不動,
於是我把y改設為double,這樣就ok了....
為什麼 int 在與 double 類型作運算的時候不會自動轉換過去?
double x,z,n,y=1;
printf("Enter a positive number: ");
scanf("%lf",&x);
z=x/y;
n=(y+z)/2;
for(;fabs(n-y)>=0.00001;){
y=n;
z=x/y;
n=(y+z)/2;
}
printf("Square root: %lf",n);
如果設 int y=1; 則在第9行的y=n;將會把小數全部都無條件捨去 (隱性浮點數型別轉換到整數型別),那麼下面進行的運算與判斷,就根本不是你所預期的了。
<pre class="c" name="code">for(;fabs(n-y)>=0.00001;){
y=n;
z=x/y;
n=(y+z)/2;
}
個人覺得是這段for迴圈判斷式int無法判斷,所以要轉double