昔、CPUが行う計算について習ったとき、確か、足し算しかできなかった記憶があります(間違っていたらすみません)。
指数関数EXP(x)などの複雑な(?)数式を計算するとき、CPUはどのように計算しているのですか。
予想では、近似値を求めるアルゴリズムを利用して、CPUが計算できるような形式に変更してるとイメージを持っています(正しい?)。
指数関数の解法にはどのようなアルゴリズムを使っているのですか?
アルゴリズムはOS~アプリソフトの中でどの階層(部分)にあるものなのですか?
ハード・ソフトの違いや、世代によってもやり方はことなるのかもしれませんが、教えてください。
一般のWindows OFFICE EXELあたりではどうなのでしょうか。
数学関数には、それぞれに、解法アルゴリズムが作られ利用されているのですか
例えば、双曲線関数はなどうなのでしょうか
No.3ベストアンサー
- 回答日時:
昔の8bit CPU は確かに整数の足し算しかできなかったので、
浮動小数点の指数関数をアセンブラで実装するのは大変でした。
浮動小数点の四則演算から実装する必要があったので・・・
今は各種の浮動小数点形式の四則演算を CPU が直接
サポートしているので、指数関数の実装は簡単です。
基本的には、テイラー展開を用います。
実際には打ち切り誤差や桁落ちなど、いろいろと考慮すべきことがありますが、
枝葉末節なので割愛します。
#蛇足ですがIntel系の場合、SSE命令などによる高速化も行われているそうです。
No.4
- 回答日時:
整数演算しかできなかった時代のCPUには浮動小数点演算専用のプロセッサ(FPU/Floating Processing Unit、NDP/Numeric Data Processor)がオプションとして用意されていました。
intelの数値演算プロセッサとしては、80486までの数値演算プロセッサがあります(80586も存在したが、対応する80586が登場せず、NDP内蔵のPentiumに移行したので幻のFPUになった)。
http://en.wikipedia.org/wiki/X87
FPUの中では、ワイヤードロジック(演算回路)やマイクロプログラムによって計算が行われます。既にあるように級数展開したアルゴリズムをベースにチューニングした方法で計算しますが、その計算の微小部分では既に計算してある表を参照するなどのテクニックを使って演算速度を稼いでいます。
過去にこの参照表が間違っていたことに起因する、PentiumのFDIVバグというのが発生し、結構話題になりました。
http://ja.wikipedia.org/wiki/Pentium_FDIV_%E3%83 …
No.2
- 回答日時:
数値計算というのはとてもわくわくする仕事で、収束演算などで前回との差がどんどん小さくなり始めるとヤッター!という感じです。
ソフトに内蔵されている実際のプログラムはいろんなことを考えて素人目には難しくなっていますが、級数展開などで自分で作ったプログラムでも結構うまくいくものです。
そして何よりいいことは収束の良さとか数学で問題にしていることがなんとなくわかることです。
ぜひ自分でプログラム作ってやってみてください。
EXP(x)=1+Σ(n→∞)(i=1,n)x^i/i!
のような級数展開を使う場合、xが1以下の場合n=10でも驚くほどよく収束します。sinやcosも同様です。しかしtanはひどい目にあいます。tanx=sinx/cosxを使うのがよいでしょう。
双曲線関数
cosh(x)=(e^x+e^(-x))/2はe^x,e^(-x)の級数展開を使って簡単に求められます。sinh(x)も同じです。tanh(x)はやったことはありませんがたぶんtanh(x)=sinh(x)/cosh(x)を使うとよいでしょう。
ベッセル関数もきわめて身近に感じられます。
もっと面白いのは数値積分で、解析解と比較して答えがあっているとカタルシスを感じます。どんなゲームより面白いでしょう。
正規分布関数は数値積分で極めてよく収束します。確率統計もぐっとやりやすくなります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- 数学 特定の座標点を通る回帰を行う方法について。 2 2022/10/10 10:27
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- 経済学 経済学の総需要曲線の計算方法について教えて下さい。 3 2022/06/12 13:21
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- 投資・株式の税金 一般口座で同一銘柄の総平均法のことで 1 2023/02/27 22:08
- C言語・C++・C# C言語 3 2022/10/04 15:07
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進数 加算 減算 C言語
-
O(n log n)について2
-
三菱シーケンサ(Aシリーズ)で...
-
EXCELの関数"STDEV(標準偏差)"...
-
浮動小数点数を10進表記するア...
-
ExcelでPC(パソコン)によって...
-
Excel VBAでの数値の計算につい...
-
floatの有効桁数
-
C言語プログラミングにて、arct...
-
三角比の俯角の計算
-
VBAでミリ秒まで出力する方法
-
VB6.0での小数点の扱いについて
-
パソコンで階乗を計算
-
c languageで 簡単な質問があ...
-
ftoa関数の作成
-
時刻の比較
-
VBAでの割り算の余りの求め方
-
ExcelのINT関数の計算結果がお...
-
0.1の10000回の累積
-
4096bitを95種類で表現すると何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
三角比の俯角の計算
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
距離から緯度経度を求める方法
-
VBAでミリ秒まで出力する方法
-
EXCELの関数"STDEV(標準偏差)"...
-
除算を使わずに10で割りたい。
-
C言語プログラミングにて、arct...
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
255の2の補数、B'00000001'が-...
-
変換指定子%22-16gの表示...
おすすめ情報