- - PR -
VAX浮動小数点形式
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-01-24 00:59
VAX浮動小数点形式(real*4)のデータをPC上で実数データに変換したいのですが変換ルーチンなどサンプルありませんでしょうか?
よろしくお願いします。 |
|
投稿日時: 2008-01-24 15:10
検索した?(ググ…)
vax ieee 教えて!goo VAX浮動小数点形式 http://oshiete1.goo.ne.jp/qa2590782.html --- DEC、Compaq、Hp ではコンパイラがサポート…、SPARCでも変換libがあった HPCの数値計算ライブラリにも変換が埋まってるのでは、math の中に? |
|
投稿日時: 2008-01-24 22:40
検索しましたがこのソース内容がいまいち不明でした。
ちなみにこのソースはスモールエンディアンそれともビッグエンディアン どちらでしょうか? よろしくお願いします。 |
|
投稿日時: 2008-01-25 10:20
配列の頭から指数を拾ってますから、BIG
Cで書いたほうが shortcoding の快感を味わえると思いますが unpack pack でわかりやすくも 出来るでしょう。 整数に論理演算と 直接bit列 を 切り貼りの どちらが わかりやすい? 最速マニアなら、{asm}埋め込みもいいかも。 ソース検索サイトで libを探すのと どちらが早いか? -- 追加 -- わかりやすさでは 1.ビット列から 符号、指数、仮数 を 切り出し 整数に格納 2.整数の仮数から浮動小数に変換(言語に組み込まれている)、 浮動小数の指数を調整、 符号を調整。 1.は VAX のbit列をイメージしないとダメですが、2.はその機種の言語のまま書ける。 [ メッセージ編集済み 編集者: MMX 編集日時 2008-01-25 11:15 ] |
|
投稿日時: 2008-01-25 15:43
20年ほど前、汎用機のIBM形式とUNIXマシン(モトローラ)のIEEE形式の相互変換を
モトローラ UNIX上のC言語で作成したことがあります。 残念ながら、そのソースは今もってません。 双方向、単精度、倍精度の変換で300ステップもなく、初版は3日もかからず1日ぐらい で書いたのかもしれません。 chi41さんの要件も、片方のターゲット機(PC)で動作するプログラムなのですから、 PCの内部表現を理解する必要はないです。 VAXの内部表現、エイディアンの相違、両マシンの表現可能な範囲、範囲を超えた 場合の処理、誤差の補正。 を考慮してPC上の浮動小数点に変換すればよいはずです。 この方法以外に両者の内部表現を理解してビット操作により、変換する方法もあります。 まずはVAXの内部表現を理解して、それをターゲット上で動作する処理で浮動小数点 変数に変換することです。 VAX形式ではないですが、Wikiを浮動小数点数で検索すれば内部表現を実数化する 式がのっています。 MMXさんが書かれているようなライブラリの説明を見ることも作業を進める手助けにな るとおもいます。 よくわからないのが誤差の補正です。私の初版にもこれが抜けていて、評価していく段階 で大きな誤差が出る場所があり、その補正を付け加えたのを覚えています。 仕組みを理解すれば、そんなに難しい処理ではありません。 |
|
投稿日時: 2008-01-29 00:43
http://velveeta.che.wisc.edu/octave/lists/archive/octave-sources.2004/msg00033.html
上記url見つけました。 vax→IEEE 32bitとなっていますが、 VAX_G、VAX_Dは倍精度と思うのですが... |
|
投稿日時: 2008-01-29 12:28
> VAX_G、VAX_Dは倍精度と思うのですが...
変換先に収容できる桁数しか処理してないだけ death |
1