J'ai besoin de mettre en œuvre la méthode Newtons pour trouver des racines carrées avec des signes de comptage de comptage donné après virgule flottante en Delphi 7. J'ai écrit ce code:Est-ce une implémentation correcte de la méthode de Newton-Raphson?
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.
S'il vous plaît, répondez à mes questions:
- Est ce code est-il correct?
- Comment imprimer la racine du résultat dans la forme normale (non exponentielle) avec tous les signes?
- Les valeurs d'entrée peuvent être très grandes (jusqu'à 200 signes). Ce code peut-il fonctionner avec eux? Et me suggérer, comment puis-je améliorer mon code?
Que signifie "jusqu'à 200 signes" - jusqu'à 200 chiffres décimaux? Si c'est le cas, vous devrez utiliser une [classe BigDecimal] (http://stackoverflow.com/questions/9690133/bcd-math-library-for-arbitrary-big-numbers). Commencez par utiliser les petits nombres, puis changez pour utiliser une grande bibliothèque décimale. Aussi la note de Matt ci-dessous à propos de vous calculant directement la racine carrée en utilisant sqrt() est correcte - vous ne devriez pas le faire car cela vous donne déjà la réponse! –