- 締切済み
C言語のプログラムについて質問です。
C言語のプログラムについて質問です。 プログラムでどうしても2.2乗という少数のべき乗を使用しなければいけなくなったのですが、 POW関数では遅くて使い物になりません。 そこで、べき乗の高速化について調べたのですが、整数のべき乗の高速化しか出てきませんでした。 少数のべき乗の高速化アルゴリズムというものはあるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
> 底になり得る値については、この計算を行う手前までわからないので、表引きは厳しいみたいです。 それはそうでしょうが、定義域にはまったく制限がないのでしょうか? f(x) = x^(1/2.2) のグラフを描けばわかりますが、0.0~1.0あたりでは比較的変化が大きく、xが大きくなればなるほど直線に近づきます。 それほど高い精度が必要ないのであれば、とびとびの値を表で持ち、その間は直線とみなして近似値を求めることはできるはずです。
- jacta
- ベストアンサー率26% (845/3158)
環境不明の上、型もわからないので正確なことはいえませんが... 底になり得る値が限られているのであれば、表引きにしてしまうのもひとつの手です。
- asuncion
- ベストアンサー率33% (2127/6289)
念のためにおたずねします。 pow関数が遅すぎて使えないことがわかるくらい、 何回もべき乗を計算する必要がある、ということでしょうか? なお、今回の話題においては、少数ではなくて小数です。
補足
現在640×480の画像を取り扱ってまして、合計307200回計算を行わないといけないのです。 pow関数を使った計算では速度の面で使えないことがわかったので何か高速化できないかと思い、質問させていただきました。 後、たしかに少数でなく小数ですね。ご指摘ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
0.2乗ということは 5乗根だから, ニュートン法なりなんなりで方程式を解けばいい... ということになるんだけど, 実際問題としてこれで速いかどうかは知らん.
補足
すみません。質問では2.2乗と書かせていただきましたが、実際は1/2.2乗でした。 ニュートン法については調べてみたいと思います。
補足
まず、お詫びを。質問には2.2乗と書かせていただきましたが、実際には1/2.2乗でした。 すみません。 底になり得る値については、この計算を行う手前までわからないので、表引きは厳しいみたいです。 環境については、何を書けばいいのかわからないのですが、型としてはdouble型の値を1/2.2乗し、double型へ入れるような形となります。