DBL_MAX * 2を含む演算をC++で計算したい

[戻る]
仲澤@失業者 2009/04/28(火) 13:52:23
ゆえあって DBL_MAX*n、[n=1〜1000程度] の値を含む四則演算をしたいのですが、
良い案がありましたら教えてください。
大昔にはlong double(80bit版)があったのですが・・・。

この場合 __m128d  など、SIMDで書くのが一般的なんでしょうか。
・・・う〜む(vv;)。

with VS2003( 32bit C++ native) on XP(SP3)
or   VS2008

宜しくお願いします。

tetrapod 2009/04/28(火) 14:54:29
意味がわかんね・・・

double 1000個のベクトル演算がしたい?
64bit double で[精度/指数範囲が]不足な演算がしたい?
いわゆる多倍長演算ではなくて?

仲澤@失業者 2009/04/28(火) 21:30:11
>意味がわかんね・・・

すみません。中途半端なレンジ・・・
 -1.0E+312〜1.0E+312 (程度の範囲) 
の四則演算をなるべく簡単に実装したい。ですね。
演算の中間の値もこの範囲に収まります。

んで、
1.double範囲に収まるように指数を落として計算する方法を考えれば良い。
2.64bitを超える浮動少数点演算でスッキリ。

の2.か別の案を教えていただきたいわけです。

*すみません。次は連休明けになるかも(vv;)。

wclrp ( 'o') 2009/04/29(水) 07:22:47
車輪の再発明的に多倍長ライブラリとかクラスとかあるけど
気になるのがバグないの?メンテナンスしてるの?ってことなんだよね。

PATIO 2009/04/30(木) 11:15:03
有効桁数としてどの程度が必要なのかによるのでは?
必要な有効桁数がdoubleの範囲に収まるのであれば、
指数部を落として、どっかに別にとっとくとかすれば可能なはず。
有効桁数がdoubleの範囲を超えるならそれこそ多倍長ライブラリとかいるのかも。

仲澤@失業者 2009/05/14(木) 17:37:35
ご回答下さった皆さん、お礼申し上げます。
PATIOさんの案を参考にして
 1.対象のValueから仮数(double)と指数(long)を分離
 2.仮数同士、指数同士を演算
 3.結果の仮数と指数を結合
てな感じにしました。
今回は有効桁の問題ではなく、単純に演算させると
指数がいっちまうのがいやだっただけだので対策もややおざなり。
結局、簡単にはなりませなんだ(vv;)。

仲澤@失業者 2009/05/14(木) 17:47:28
[[解決]]
またやっちまった

古いスレッドには追加発言できません。