-
1 # zbx30
-
2 # 多維觀世界
我在上初中時對這個問題很感興趣,當時書上有計算開平方的具體方法(見圖一),於是無聊時,手動開方,當時求得小數點後十位,1.4142135623。再往下資料龐大,計算量也大,就放棄了。
直到高中畢業後,高考後又閒的無聊,想起這檔子事了。就正而八經地用了一個本子,將大數分解成一段一段小數,用家裡的計算器計算,求得二十位根號二(包括第一位1,下同),
14142 13562 37309 50488。
大學裡學習了計算機程式設計,便又對這個問題感興趣了,當時編了一個c語言的程式,如下圖二。結果計算精度還不如手動的,是1414213568。這是因為整數變數有最大值限制,於是高中時的方法又用上了。將超出變數值限制的數分成5位一段,每段放入一個數組。這樣就可以求出幾乎任意位數的根號二值了。於是說做就做,終於寫出計算根號二的程式,隨後又經過不斷演算,修改其中的各種錯誤。最終的程式由於太長,不便列出。只把結果列出。圖三是一千位的根號二數值。我用這個程式求得十萬位,見圖四。
當然這個程式不僅可以算根號二,還可以進行任意數開方。
-
3 # 宇宙裂痕
二分法c語言程式設計
#include<stdio.h>
double f(double x)
{
double y;
y=x*x-2.0;
return y;
}
int main()
{
double a, b, c, t;
printf("精度:");
scanf("%lf",&a);
printf("初始值b c:");
scanf("%lf%lf",&b,&c);
if (f(b)*f(c)<0)
{
do
{
t=(b+c)/2;
printf("過程:%lf\n",t);
if (f(b)*f(t)<0)
c=t;
else
b=t;
} while(f(t)*f(t)>a*a);
printf("最終結果:%lf",t);
}
else
{
printf("錯誤");
}
return 0;
}
-
4 # 悠鹿鳴
√2= 1.4142135623731
過程:
設x=√2,
那麼,變形可得x²=2。
令f(x)=x²-2,
此時,函式f(x)的零點的橫座標就是√2的值。
對f(x)使用牛頓迭代法,φ(x)=x-f(x)/f"(x),
即,φ(x)=x/2+1/x,
取初值x=2,迭代一次得x=1.5,兩次得x=1.4166667,三次得x=1.414215686,四次得1.414213562。
僅四步迭代,與√2的誤差已經非常之小,可滿足大部分工程上要求的精度。
擴充套件:
√2 是一個無理數,它不能表示成兩個整數之比,是一個看上去毫無規律的無限不迴圈小數。
早在古希臘時代,人們就發現了這種奇怪的數,這推翻了古希臘數學中的基本假設,直接導致了第一次數學危機。根號二一定是介於1與2之間的數。然後再計算1.5的平方大小……也就是一個用二分法求方程x^2=2近似解的過程。
回覆列表
手開根號2(與做豎式除法方法相似)
如果你要在小數點保留三位,就在2.後邊加6個0。首先2只夠1的平方·