最近復習關(guān)于Java的知識搏存,想起一個有趣的問題:可以自己實現(xiàn)一個JDK嗎?
隨著最近的閱讀源碼仑乌,問題自然而然有了答案兑燥,當然可以亮瓷,只不過Sun公司已經(jīng)將它開源并與廣大程序員一起維護,沒必要重復造輪子了降瞳。
java.util.Math包中判斷一個數(shù)為素數(shù)的方法和求平方根的方法嘱支,其中判斷為素數(shù)的方法感覺思路比較新穎,可以借鑒挣饥,求平方根用到了牛頓迭代法除师。
判斷一個數(shù)是否為素數(shù)(源代碼):
//true代表素數(shù)
public static boolean isPrime(int N){
if(N<2){
return false;
}
for(int i=2;i*i<=N;i++){
if(N%i==0){
return false;
}
}
return true;
}
求平方根(源代碼):
public static double sqrt(double c){
if(c<0) return Double.NaN;
double err = 1e-15;
double t = c;
while(Math.abs(t-c/t)>err*t)
t = (c/t+t) /2.0;
return t;
}
http://www.matongxue.com/madocs/205.html#/madoc
個人理解:構(gòu)造二次函數(shù)f(x)=x^2-c,求平方根轉(zhuǎn)化為求x
f '(x) = 2x 所以在(c,c2-c)的切線y-(c2-c)=(2c)(x-c) 使y=0解得x=c/2+1/2=c/2+0.5
依次類推,直至滿足條件Math.abs(t-c/t)<=err*t 此條件正在研究什么含義扔枫,留待后補
原理圖:圖片來自上文博客汛聚,侵權(quán)即刪