- PR -

VAX浮動小数点形式

1
投稿者投稿内容
chi41
会議室デビュー日: 2003/11/15
投稿数: 3
投稿日時: 2008-01-24 00:59
VAX浮動小数点形式(real*4)のデータをPC上で実数データに変換したいのですが変換ルーチンなどサンプルありませんでしょうか?
よろしくお願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2008-01-24 15:10
検索した?(ググ…)
vax ieee
教えて!goo VAX浮動小数点形式
http://oshiete1.goo.ne.jp/qa2590782.html
---
DEC、Compaq、Hp ではコンパイラがサポート…、SPARCでも変換libがあった
HPCの数値計算ライブラリにも変換が埋まってるのでは、math の中に?
chi41
会議室デビュー日: 2003/11/15
投稿数: 3
投稿日時: 2008-01-24 22:40
検索しましたがこのソース内容がいまいち不明でした。

ちなみにこのソースはスモールエンディアンそれともビッグエンディアン
どちらでしょうか?

よろしくお願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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 ]
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-01-25 15:43
20年ほど前、汎用機のIBM形式とUNIXマシン(モトローラ)のIEEE形式の相互変換を
モトローラ UNIX上のC言語で作成したことがあります。
残念ながら、そのソースは今もってません。
双方向、単精度、倍精度の変換で300ステップもなく、初版は3日もかからず1日ぐらい
で書いたのかもしれません。

chi41さんの要件も、片方のターゲット機(PC)で動作するプログラムなのですから、
PCの内部表現を理解する必要はないです。
VAXの内部表現、エイディアンの相違、両マシンの表現可能な範囲、範囲を超えた
場合の処理、誤差の補正。
を考慮してPC上の浮動小数点に変換すればよいはずです。
この方法以外に両者の内部表現を理解してビット操作により、変換する方法もあります。

まずはVAXの内部表現を理解して、それをターゲット上で動作する処理で浮動小数点
変数に変換することです。
VAX形式ではないですが、Wikiを浮動小数点数で検索すれば内部表現を実数化する
式がのっています。
MMXさんが書かれているようなライブラリの説明を見ることも作業を進める手助けにな
るとおもいます。

よくわからないのが誤差の補正です。私の初版にもこれが抜けていて、評価していく段階
で大きな誤差が出る場所があり、その補正を付け加えたのを覚えています。

仕組みを理解すれば、そんなに難しい処理ではありません。
chi41
会議室デビュー日: 2003/11/15
投稿数: 3
投稿日時: 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は倍精度と思うのですが...
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2008-01-29 12:28
> VAX_G、VAX_Dは倍精度と思うのですが...
変換先に収容できる桁数しか処理してないだけ death
1

スキルアップ/キャリアアップ(JOB@IT)