我需要實現浮點在Delphi 7之後發現平方根與給定的計數次數跡象牛頓方法我寫了這個代碼:這是牛頓 - 拉夫森方法的正確實現嗎?
program NewtonMethod
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
const
signCount = 50; //Signs after floating point count
var
number, curRoot, prevRoot: Extended;
precision: Extended;
function input(): Extended;
begin
Write('x=');
try
Readln(number)
except
Writeln('Invalid input data, please try again');
Input();
end;
end;
begin
input();
curRoot := sqrt(number); //Íà÷àëüíàÿ
precision := 1/power(10, signCount);
prevRoot := 0;
repeat
prevRoot := curRoot;
curRoot := prevRoot - (Power(prevRoot, 2) - number)/(2 * prevRoot);
until
Abs(curRoot - prevRoot) < precision;
Writeln(curRoot);
ReadLn;
end.
請回答我的問題:
- 是這段代碼正確嗎?
- 如何以正常(不是指數形式)結果根以所有符號打印?
- 輸入值可能非常大(最多200個符號)。此代碼可以與他們合作嗎?
並建議我,我該如何改進我的代碼?
「最多200個符號」的意思是什麼 - 最多200位數字,小數?如果是這樣,你將需要使用[BigDecimal類](http://stackoverflow.com/questions/9690133/bcd-math-library-for-arbitrary-big-numbers)。首先讓它爲小數字工作,然後改爲使用大的小數點庫。另外馬特下面關於你使用sqrt()直接計算平方根的說明是正確的 - 你不應該那樣做,因爲它已經給你答案了! –