• ベストアンサー

数学のアルゴリズム

コンピュータが数値を数学的に処理する際のアルゴリズムは人間が数学を解く時のアルゴリズムと同じ、端的にいえば「プログラムのアルゴリズム=数学の解法のアルゴリズム」なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

「どういう解法で、アルゴリズムを組むか」です。 数学の公式を知っている人なら、その公式を使ったアルゴリズムにする場合があります。 一方、公式を知らなければ、自分なりの解法で、アルゴリズムを作ることになる場合もあります。 机上の数式そのものを、プログラミング言語で表現できる訳ではないので、プログラミング言語で計算できる形に変えていきます。 また、コンピュータで計算する場合、何も考えないでプログラミングすると、表現できるデータに限度があり、浮動小数点だけでなく、大きな値と小さな値を早い段階で演算することで、小さい値の方が欠落してしまう場合があります。そのため、机上での算出順とは別の順序で演算していくといった工夫をします。 また、膨大な計算を行う場合、計算速度を上げるため、コンパイラの特性に合わせて、演算の種類や演算順序を変えるといった工夫もします。

gayaldy
質問者

補足

またまた、ご丁寧に有難う御座います。ただくどいようですが、広い意味では、「プログラムのアルゴリズム=数学の解法のアルゴリズム」で両者は一つの論理的なものの考え方になるのでしょうか?

その他の回答 (4)

回答No.5

「広い意味」、「一つの論理的なものの考え方」とは、具体的にどういうものを指しているのでしょうか? 同じ解を得るのに、求める方法は一つではありません。たとえば、既に公式が見つかっているものに対して、公式にそのまま当てはめたものと、地道に計算していったもの、これをgayaldyさんは、「広い意味」、「一つの論理的なものの考え方」では、同じと解釈するのでしょうか? また、具体的な解法が見つかっているものと、そうでないもので地道に計算するもの。これらを、どう判断するのでしょうか? 答えがないものは、質問とはされず、ここでは規約違反になります。具体的に説明できないなら、これ以上、回答を集めても無駄だと思いますけど?

gayaldy
質問者

お礼

そうかもしれません。有難う御座いました。

回答No.3

プログラムのアルゴリズム=数学の解法のアルゴリズム 理想に過ぎないと思います。 実際は物理演算などに使うことが多いため オーバーフロー(桁足らず)にならないように、 浮動小数点数(誤差あり)を使用することが多いです。 固定小数点数(誤差なし)は自分で作るとか、 アセンブリ等の低級言語プログラムを使ったりしなくてはなりません。 そのようにすれば常にオーバーフローの危険が付きまといます。 あるいは、浮動小数点数の誤差を軽減するために、 変数を保持する場合に小数でなくて 分数のようなオブジェクト(データの塊)にするとか、 色々やらなくてはなりません。 結果的には、数学の解法のアルゴリズムよりも複雑になると思います。

gayaldy
質問者

補足

早速の回答有難う御座います。再度確認させていただけるとすれば、逆に浮動小数点以下の処理等、限られたビット内での浮動小数点処理等を除けば、人間の解法とイコールということなのでしょうか?

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

コンピュータの数値解析には必ず誤差が付きまとってきます。 コンピュータで答えを出す場合、常に有効桁数を考慮する必要があります。コンピュータでアルゴリズムを考える場合、誤差が収束していく場合もあれば発散していく場合もあります。 せっかくコンピュータで答えを出したのに誤差が大きすぎて使えないということもあります。

gayaldy
質問者

補足

すみません。先の方に対する質問と同じですが、限られたビット内での浮動小数点といった問題での誤差以外は大筋は人の手によるものと同じ流れになるということなのでしょうか?

回答No.1

端的に言うと「必ずしもそうじゃない」です。 実行効率とか、アルゴリズムの組みやすさ、も関わってきますからね。 (人間が解きやすくても、必ずしもコンピュータにとって解きやすい方法論、とは限らないから、です)。

関連するQ&A