我需要实现浮点在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()直接计算平方根的说明是正确的 - 你不应该那样做,因为它已经给你答案了! –