0

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 符号)。このコードはそれらで動作しますか?

どうすればコードを改善できますか?

4

1 に答える 1

1

curRoot:=sqrt(数値); << メソッドを使用せずに、ここで数値の平方根を直接計算しているようです。

他の方法を使用して「最初の推測」を選択する必要があります...これが単なる楽しみである場合は、半分の数を試してください

このページが役に立つかもしれません: https://en.wikipedia.org/wiki/Newton%27s_method#Square_root_of_a_number

Extended データ型は、小数点以下 20 桁程度しか処理できません。小数点以下 200 桁は難しい要求であり、実行するのはおそらくかなり難しいでしょう。

于 2012-12-01T09:58:03.237 に答える