6

コンピュータ アーキテクチャ クラス用に、IEEE 浮動小数点数の除算をエミュレートするプログラムを作成する必要があります。私はこれをほぼ完了しましたが、プログラムが APL でどのように見えるかを見るのは興味深いと思いましたが、私が知る限り、APL でビット単位の操作を行う (ビット単位および/または) 、シフトなど...)。可能であれば、APL でこれを行う最も簡単な方法は何ですか?

4

2 に答える 2

1

あなたの APL システムによっては、これは不潔な方法です。一部の APL システムには []DR システム関数があり、変数の内容をあるデータ型から別のデータ型に変換するための高速で緩やかな方法を可能にします。Dyalog APL をお持ちの場合 (おそらくこれは APL2000 で動作します)、これを試してください:

      )CLEAR
      []IO := 0  // sorry, no APL chars
      []PP := 16
      a := 11 []DR 7.42  // 11 means "type number 1, boolean, 1 bit"
      a
1 0 1 0 1 1 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0
      a[42]
1
      a[42] := 0
      645 []DR a   // 645 means "type number 5, double, 64 bit"
7.388750000000003
      )CLEAR

ここで []DR は、浮動小数点数をビットのベクトルに変換してから再び戻すという難しい部分を行います。(これはまさにコンピュータ アーキテクチャのクラスで学ぶ必要があることかもしれませんが、答えを確認するのに悪い方法ではありません)

注意: この手法を使用すると、有効な浮動小数点数ではない値を作成できます。これは、インタープリターやシステムをクラッシュさせたり、後で問題を引き起こす可能性のあるものを置き去りにしたりするという厄介な影響を与える可能性があります。必ず)CLEAR実験後に行ってください。

于 2015-04-20T13:19:39.080 に答える