
下記のサイトのソースを元に
アークタンジェント( atan2()関数 )をテーブル化してみたのですが
http://asdf.wkeya.com/code/usetable_hpp.html
誤差が気になり何か良い補正の方法はないかと探して見たところ
なかなか見つかりませんでした
次のサイトでSinテーブルの誤差を修正する方法は見つけたのですが
http://ctrlwww.ee.noda.tus.ac.jp/wiki/kansai/ind …
そこでatanテーブルの誤差を補正する
なにかわかりやすくよい方法はないでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3の訂正です。
>テイラー展開の最初の項はTacosanで書かれていますので、
テイラー展開の最初の項はNo2でTacosanさんが書かれていますので、
と書くべきところを、Tacosanさんすみません。
No.3の二次の項までを入れてざっと計算してみましたがCで倍精度ではatanの方が速かったです、No.2で書かれている一次までだとテーブルを使う方が若干速いという結果でした。
No.3
- 回答日時:
No.1です
テイラー展開の最初の項はTacosanで書かれていますので、その次の項からは
http://mail2.nara-edu.ac.jp/~asait/c_program/sam …
が参考になると思います。
続きを書くと
atan a + x/(1+a^2)-x^2*a/(1+a^2)^2......
のようになります。
ここまで計算するとatanの方が速い可能性もありますので、単に速度を上げる目的なら注意してください。テーブル引きは意外と時間がかかりますので。
No.1
- 回答日時:
テイラー展開を使うのが一番簡単なように思います。
質問欄の2番目のリンクは、sin(a+b)のsinの加法定理を使って、cos(b)とsin(b)を taylor展開できれいに展開できていますが、atanの場合は適当な加法定理がなさそうなので、強引にテイラー展開するのが簡単そうです。
x=a+bとおいて(aはテーブルにある角度、bはその近傍)
atan(a+b)-atan(a)をそれぞれ展開し、
その結果をテーブルから求めたatan(a)に足すとそこそこの精度が得られます。
この場合はaの項が残りますのでリンクのような美しさはないですが。
SSEのようなベクトル計算機能のないCPUだと多分速度が得られるように思いますが、最近のCPUだとテーブルを使わない方法と比べてみるのもおもしろいと思います。
この回答への補足
x=a+bで
aはatan2(y,x)の引数y/xで引けるテーブルの値なのはわかるのですが
bはどうやって求めれば良いのでしょうか?
2つ目のURLの
gosa=x-sinindex*M_PI/254
のあたりから取れば良いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
COBOLのINVALID KEYが理解でき...
-
[C#] DataGridViewでコンボボッ...
-
★クリスタルレポートの元になる...
-
DataGridViewで変更した値を反...
-
ExcelVBAからAccessMDB内のテー...
-
VBとアクセスでSQL文に変...
-
『列名 '担当者CD' があいま...
-
オラクルデータベースへの更新方法
-
Accessで宛名ラベルに同一宛先...
-
ACCESS2010 実行時エラー 2766
-
.net 複数の主キーを設定する方法
-
手動または分散トランザクショ...
-
「テーブルに主キーがありませ...
-
DataGridViewに複数テーブルの...
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
VB.NETの配列にExcelから読み込...
-
Access 2010で実行時エラー3061
-
クリスタルレポート(8.5)の書式...
-
エクセルでXY座標に並べられた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
VBとアクセスでSQL文に変...
-
他のMDBのテーブルに追加したい
-
手動または分散トランザクショ...
-
エクセルのテーブルを解除する...
-
COBOLのINVALID KEYが理解でき...
-
AccessからExcelへエクスポート...
-
ExcelVBAからAccessMDB内のテー...
-
CSVファイルのエクスポートでソ...
-
DAOの作成単位について
-
ワークテーブルの作成について
-
Accessで別mdbのテーブルをコピー
-
Access2007でアプリケーション...
-
DataGridViewに複数テーブルの...
-
VB.NETでのAccessテーブルリンク
-
ACCESS2010 実行時エラー 2766
-
Excel複数シートをaccessへ一括...
-
[C#] DataGridViewでコンボボッ...
-
Accessでテーブルのデータのみ...
おすすめ情報