« 数値型の憂鬱 | トップページ | OpenTypeレイアウトへの道 »

2008年6月 7日 (土)

数値型の憂鬱(2)

前回の続きである。

高精度の数値の演算つまり多倍長演算のルーチンを自作するのもいいのだが、なるべくなら既存の信頼におけるものを使いたいものである。Googleなどの検索サイトで多倍長演算ライブラリを検索すれば、様々なライブラリが見つかり、開発環境の言語に合わせて選択できるが、WindowsのOS自体に用意されているライブラリを使う事もできる。

正確に言うと、WindowsのOS自体というより、WindowsのOLEオートメーションで主に使われるバリアントのために用意されているライブラリで、oleaut32.dll

  • VarDecAdd(加算)
  • VarDecSub(減算)
  • VarDecMul(乗算)
  • VarDecDiv(除算)
  • VarDecAbs(絶対値)
  • VarDecFix
  • VarDecInt
  • VarDecRound
  • VarDecNeg
  • VarDecCmp(比較)

などのAPIを使って多倍長演算を行うことができる。これらのAPIは、主に、DECIMAL構造体へのポインタを引数に取り、DECIMAL構造体は次のように宣言されている。

Numeric2_1_3 

wReservedフィールドはバリアントに格納されているデータの型を表し、Decimal型の場合、vt_decimal(14)、scaleフィールドは小数点の位置を表し、signフィールドを符号を表し、hi32、low32、mid32フィールドにスケーリングされた数値が整数値として格納される。

これとODBCを組み合わせてもよいのだが、上述のDecimal構造体のスケーリングされた整数値を格納する領域が96ビットなので、2の96乗つまり最大精度28桁までの数値しか表現できないwobbly。28桁だと最大精度38桁のOracleのNUMBER型はもとよりDB2のNUMBER型すら完全に表現できない・・・

んー。OSで多倍長演算ももっとサポートしてほしいのだが・・あまり、そのような要望はないのだろうか?

« 数値型の憂鬱 | トップページ | OpenTypeレイアウトへの道 »

DB2」カテゴリの記事

Oracle」カテゴリの記事

Windows」カテゴリの記事

データベース」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651761

この記事へのトラックバック一覧です: 数値型の憂鬱(2):

« 数値型の憂鬱 | トップページ | OpenTypeレイアウトへの道 »

自作ソフトウェア

無料ブログはココログ

メモ