
No.2ベストアンサー
- 回答日時:
★乗算はテーブルにすると早い。
・2桁の『乗算』を『*』演算子で計算するよりも、10×10 のテーブルを
用意して、テーブル参照させると高速になります。また、1桁の参照も
別の1桁テーブル参照をさせると高速になります。→組み合わせる。
・このようにテーブルを用意して、固定小数点(整数値)で計算させると
高速になります。→『多倍長演算』と呼び、マクローリン展開でどこ
まで計算結果に精度を求めるかです。
・『マクローリン展開』でも収束するまで計算させるのではなく、回数を
指定して 3~4 で強制的に計算を終了すれば高速になります。
・収束は倍・倍に精度がよくなるため、3~4 回の計算でも結構よい精度
になりそうです。→試してみましょう。
最後に:
・よく使う数は、『定数』としてテーブルに保存して計算させると高速化
できます。→『マクローリン展開』で利用する『階乗』など。(1!~6!)
・あと、実数値を多倍長の整数値で表現して、あとで小数点と桁数の丸め
込みなどを行えば高速になります。→実数よりも整数が高速だから。
・『多倍長演算』で検索するといろいろ出てきます。
・以上。おわり。参考になりましたか?
リンク:
・http://yosshy.sansu.org/maclaurin.htm
・http://assam.cims.hokudai.ac.jp/~josch/workshop/ …
・http://www.sist.ac.jp/~suganuma/kougi/other_lect …
参考URL:http://www5.airnet.ne.jp/tomy/cpro/longint.htm
No.5
- 回答日時:
No.4さんに同意。
8ビット機時代ならともかく、現在はFPUがある為、三角関数程度なら下手に近似計算するよりも高速だと思います。うちの会社(ゲーム開発)では普通に使っています。No.4
- 回答日時:
PCでやるなら自前で展開式を使っても高速にならないんじゃないかと思う。
初等関数くらいはFPU命令であるし、i486以来FPUはCPU内蔵だからね。ソフトウェアで少々頑張ってもCPU内部で最適化されたハードウェア処理にはかなわないんじゃないかな。# まずは初等関数命令の実行サイクルを確認しておいた方が良いと思う
PCでやる前提だと高速化に有効なのは低い精度で済む場合のテーブル参照くらいかな。これもキャッシュを乱して全体としては反って遅くなる場合もあるから要注意だけど。
なお多項式近似についてはマクローリン展開は最適ではないので、もっと効率的に計算できる展開係数がある。同じ精度を出すのに2,3項は減らせるんじゃなかったかな。
近似係数の計算法なんかは「近似式のプログラミング」などの書籍に載っていたと思う。
No.3
- 回答日時:
> 例としまして、cos xをxの4乗までの計算精度でよい場合
> などは早くなるということでしょうか?
> (自分で速度を測ってみます。)
こちらは、処理系によりけりですので、測ってみるしか無いですね。
コストがかかるとは言っても、下手な計算アルゴリズムやコンパイラの最適化性能が悪いと、微妙です。
cos(x)のマクローリン展開にしても、Cの記述で、
例1:
y= 1 - x*x/2 + x*x*x*x/4*3*2 - x*x*x*x*x*x/6*5*4*3*2;
(xに関する乗算が9回、その他の乗算が6回)
例2:
double x2=x*x;
double x4=x2*x2;
double x6=x4*x2;
y = 1 - x2/2 + x4/24 - x6/720;
(xに関する乗算が3回、ただしdouble変数を確保する処理が3つ)
なんてテクニックも一般的です。
さすがに、最適化機能のあるコンパイラなら、定数の乗算はプリプロセッサあたりで処理されるハズですし、xの乗算についてもうまい事最適化するかもしれませんが…。
--
> ~テイラー展開でなく、
> そちらの近似式を使うと計算が早くなる」
> といったことなのだろうか? とも考えてました。
もちろん、そういう近似式もあるかも知れません。
必ずあるとは限らないし、特定の条件でしか成り立たない可能性もあります。
逆に、特定の条件を絞り込めるのなら、より良い近似があるかも知れません。
例:
sin(x)を、傾きが+1、-1の直線で場合分けして近似してしまうとか。
/\/
--
No.2さんのような、テーブルを使う方法は有効です。
例:
ゲームの話ですが、敵や味方の動き、弾なんかの方向が36方向しか取らない、方向を整数型で持っているので360方向だなんて場合には、
cos(0°)
cos(1°)
・
・
cos(359°)
の360個のテーブルを持っておいても、メモリは大して圧迫されません。
あらためて詳細な説明ありがとうございます。
マクローリン展開の計算方法や、テーブルの利用に関して、必要な
精度で処理できるかなど検討してみます。
No.1
- 回答日時:
> cosやsinの計算にテイラー展開したもので代用する方が
> 計算が早くなるということでしょうか?
どこまで展開するか?→どこまでの精度が必要か?次第です。
展開式が延々と続くなら必ずしも早くないし、計算結果も通常の取り扱いでは無視される精度で出てしまいます。
回答ありがとうございます。
例としまして、cos xをxの4乗までの計算精度でよい場合
などは早くなるということでしょうか?
(自分で速度を測ってみます。)
「インドの大数学者ラマヌジャンがπに関して考案したような
近似式がsinやcos, expにもあり、テイラー展開でなく、
そちらの近似式を使うと計算が早くなる」
といったことなのだろうか? とも考えてました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 θ=π/2 のまわりでの f(θ)=sinθ/cosθのローラン展開に関して 以外の「」の解答を頂き 13 2022/11/11 09:45
- Excel(エクセル) エクセルで関数の数式を入力できません。 3 2022/08/25 17:49
- 物理学 (1)秒針の角速度の大きさω(ω>0)を計算しなさい 単位はrad/s、πはそのまま残すこと (2) 3 2023/05/01 12:58
- 数学 1. 「f(z)=tan(z) の 0<|z-π/2|<π でのローラン展開は f(z)=tan(z 1 2022/07/20 21:56
- 数学 4-3√2sinX-2cos^2x=0 のような三角方程式で cos^2を1-sin^2に変換するの 3 2023/03/01 22:59
- 物理学 物理 2 2023/01/17 13:31
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- その他(IT・Webサービス) コストカットの計算について質問です。 例えば時期が1171円・業務削減見込み時間42分の場合、計算方 2 2022/12/07 09:48
- 計算機科学 三角関数 加法定理 1 2023/08/15 11:56
- 数学 マクローリン展開を簡単にする方法を教えてください 2 2023/07/10 16:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入射角反射角
-
65536は2の何乗なのでしょうか?
-
VBAの高速化に関しての質問
-
べき乗の計算が遅い理由
-
C++ で預金計算
-
C言語の関数を分かりやすく説...
-
モジュラス103の計算とは何でし...
-
勤怠管理表を作成しています、...
-
VBAで関数をつくる
-
コマンドプロンプト内で右揃え...
-
VB4でリサージュ図形の面積測定
-
JAVAのプログランミング
-
交通流シミュレータ
-
駅間の距離を求め運賃計算するJ...
-
分数計算で分母と分子を維持す...
-
DLL(VC++で作った)で稼動中の...
-
VBAでベッセル関数を使う方法
-
変化させるセルが変化しない
-
PHPとJavaでSHA256の結果を同じ...
-
パソコン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
モジュラス103の計算とは何でし...
-
変化させるセルが変化しない
-
数値計算の高速化 (cos, sin, exp)
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
スレッド処理からダイアログを...
-
時間(ミリ秒を含む)の引き算
-
VB6で正確なミリ秒を計測したい...
-
60進数の四則計算
-
PHPとJavaでSHA256の結果を同じ...
-
C言語についてです。 再帰を使...
-
なぜオーバーフローになるので...
-
VBA入力フォームで労働時間の計...
おすすめ情報