ゆえあって DBL_MAX*n、[n=1~1000程度] の値を含む四則演算をしたいのですが、
良い案がありましたら教えてください。
大昔にはlong double(80bit版)があったのですが・・・。
この場合 __m128d など、SIMDで書くのが一般的なんでしょうか。
・・・う~む(vv;)。
with VS2003( 32bit C++ native) on XP(SP3)
or VS2008
宜しくお願いします。
意味がわかんね・・・
double 1000個のベクトル演算がしたい?
64bit double で[精度/指数範囲が]不足な演算がしたい?
いわゆる多倍長演算ではなくて?
>意味がわかんね・・・
すみません。中途半端なレンジ・・・
-1.0E+312~1.0E+312 (程度の範囲)
の四則演算をなるべく簡単に実装したい。ですね。
演算の中間の値もこの範囲に収まります。
んで、
1.double範囲に収まるように指数を落として計算する方法を考えれば良い。
2.64bitを超える浮動少数点演算でスッキリ。
の2.か別の案を教えていただきたいわけです。
*すみません。次は連休明けになるかも(vv;)。
車輪の再発明的に多倍長ライブラリとかクラスとかあるけど
気になるのがバグないの?メンテナンスしてるの?ってことなんだよね。
有効桁数としてどの程度が必要なのかによるのでは?
必要な有効桁数がdoubleの範囲に収まるのであれば、
指数部を落として、どっかに別にとっとくとかすれば可能なはず。
有効桁数がdoubleの範囲を超えるならそれこそ多倍長ライブラリとかいるのかも。
ご回答下さった皆さん、お礼申し上げます。
PATIOさんの案を参考にして
1.対象のValueから仮数(double)と指数(long)を分離
2.仮数同士、指数同士を演算
3.結果の仮数と指数を結合
てな感じにしました。
今回は有効桁の問題ではなく、単純に演算させると
指数がいっちまうのがいやだっただけだので対策もややおざなり。
結局、簡単にはなりませなんだ(vv;)。
またやっちまった