![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
下記のサイトのソースを元に
アークタンジェント( 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で質問しましょう!
似たような質問が見つかりました
- 政治 ひろゆき氏の「沖縄についての議論」は、何から目を逸らしているのか?……問題の本質が分かる記事ですね? 10 2022/10/15 06:50
- 政治 内閣改造、総理にとってのライバル潰しの策が練られた人選ですか? 3 2022/08/10 09:45
- その他(ネットショッピング・通販・ECサイト) この画像にツッコミお願いします 1 2022/08/25 15:05
- その他(ネットショッピング・通販・ECサイト) 骨伝導ヘッドセットで この二つは値段が違うだけでは同じですか? 1 2023/02/13 19:13
- 政治 【旧統一教会と接点】立憲「逃げられると思ったら大きな間違い」細田議長の説明要求……大丈夫かな? 3 2023/01/11 14:35
- 事件・事故 前川喜平氏に疑問「正義の味方みたいになっているけど違法です」…カルトも危険ですが官僚支配も危険ですね 10 2022/08/07 09:24
- マウス・キーボード Pc切替器が動作しません。理教えてください。よろしくお願いします。 4 2023/05/10 15:43
- その他(生活家電) 電熱ヒーターパッド(17×24cm)の電源がすぐに切れるので困っています。 2 2022/12/20 13:31
- FX・外国為替取引 円安・円高について 5 2023/01/04 11:20
- 建築学 丹下建築の「海の体育館」、解体方針固まる……これからは建築家にも発想の転換が必要かな? 2 2023/02/08 09:23
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
VBとアクセスでSQL文に変...
-
DataGridの中身をDataSetにテー...
-
AccessからExcelへエクスポート...
-
ACCESS2010 実行時エラー 2766
-
Sinテーブルの値からAtan等の値...
-
オラクルデータベースへの更新方法
-
COBOLのコーディングについて
-
【ADO】「Execute」を使うと...
-
ウェブアプリケーションでのテ...
-
C# OleDbDataAdapter.Fillメソ...
-
Access2007でアプリケーション...
-
Cシェルで、全テーブル名をコ...
-
vb6のコンボボックスの操作につ...
-
手動または分散トランザクショ...
-
シートの全データを2次元のテ...
-
更新時の「同時実行エラー」の対策
-
リストボックスに複数列表示し...
-
(泣)VBscriptでinnerhtmlを使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBとアクセスでSQL文に変...
-
WORD VBA プログラム修正をお願...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
DataGridViewに複数テーブルの...
-
他のMDBのテーブルに追加したい
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
手動または分散トランザクショ...
-
SQLを発行とは?クエリの作成と...
-
AccessからExcelへエクスポート...
-
CSVファイルのエクスポートでソ...
-
ACCESS2010 実行時エラー 2766
-
HTMLのテーブルの行数が多くな...
-
ExcelVBAからAccessMDB内のテー...
-
【ADO】「Execute」を使うと...
-
★クリスタルレポートの元になる...
-
DataGridの中身をDataSetにテー...
-
ACCESSのテーブル名をリストに...
-
COBOLのINVALID KEYが理解でき...
おすすめ情報