iT邦幫忙

0

C語言 平方根

  • 分享至 

  • xImage

有個疑問,一開始我是設 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);
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

24
wiseguy
iT邦超人 1 級 ‧ 2013-07-03 22:23:42
最佳解答

如果設 int y=1; 則在第9行的y=n;將會把小數全部都無條件捨去 (隱性浮點數型別轉換到整數型別),那麼下面進行的運算與判斷,就根本不是你所預期的了。

測試了一下確實是這個問題! 感恩^^

ted99tw iT邦高手 1 級 ‧ 2013-07-04 10:12:57 檢舉

解決了平方根,當然就要搞另一根...

8
temo
iT邦新手 1 級 ‧ 2013-07-03 20:55:19
<pre class="c" name="code">for(;fabs(n-y)>=0.00001;){  
    y=n;  
    z=x/y;  
      n=(y+z)/2;  
 }  

個人覺得是這段for迴圈判斷式int無法判斷,所以要轉double

我要發表回答

立即登入回答