`
sjgau
  • 浏览: 96983 次
  • 性别: Icon_minigender_1
  • 来自: 台灣省 台北市
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

在數學上, (X + 1) 恆大於 (X)

 
阅读更多
但是,在程式設計的領域,很容易出現以下的現象。

程式設計的領域是 有限的,數學的領域是 無限的。

這個現象的改善,可以將 int --> double,
但是,問題依然存在。


#if 0
這裡是 以下程式的輸出:

 x= 10, y= 11

 exit the loop, y = x + 1, y <= x,
 x= 2147483647, y= -2147483648
Press any key to continue
#endif
// ----------------------------------------------

#include <stdio.h>

int main()
{
	int x, y;
	
	x= 10;
	y= x + 1;
	printf("\n x= %d, y= %d\n", x, y);
	
	while (y > x) {
		x= x + 1;
		y= x + 1;
	}
	
	printf("\n exit the loop, y = x + 1, y <= x, \n");
	printf(" x= %d, y= %d\n", x, y);
	
	return(0);
}

0
1
分享到:
评论
2 楼 sjgau 2010-06-17  
歡迎大家踩我,

請寫理由。

1 楼 sjgau 2010-06-17  
改成 double 型態之後,雖然有改善,
但是這個問題 依然存在。

double 採用 52個 bits 當作精確度使用,
所以,精確的範圍,可以到 2^53




#if 0

 x= 10, y= 11

 exit the loop, y = x + 1, y <= x,
 x= 9007210994540240, y= 9007210994540240

 x, about 2^(n), n about => 53.000
Press any key to continue

#endif
// ----------------------------------------------

#include <stdio.h>
#include <math.h>

int main()
{
	double x, y, r;
	
	x= 10;
	r= 1.0 + 1.0E-6;
	
	y= x + 1;
	printf("\n x= %.0lf, y= %.0lf\n", x, y);
	
	while (y > x) {
		x= x*r;
		y= x + 1;
	}
	
	printf("\n exit the loop, y = x + 1, y <= x, \n");
	printf(" x= %.0lf, y= %.0lf\n", x, y);
	
	y= (log(x))/(log(2.0));
	printf("\n x, about 2^(n), n about => %.3lf\n", y);
	return(0);
}




相关推荐

Global site tag (gtag.js) - Google Analytics