0

円の円周の長さを計算し、ユーザーから半径の値を読み取る小さなプログラムをspimで書きたい...そしてここにコードがあります

    sw $s0, p2
l.s $f6 ,p2
li.s $f2 ,3.4

mul.s $f8, $f2, $f6

s0 は、.data セクションの user p float 変数から入力された radius の値です。

プログラムを実行した後、レジスタ f2、f6、f8 にこれらの値があります (s0=3 の場合):

FP2 = 4059999a
FP6 = 00000003
FP8 = 0000000a

その結果は本当ですか?それが本当なら、なぜ f8 10 の値が 10.2 ではないのですか?

4

1 に答える 1

0

0000000a は、浮動小数点数の 16 進数表現です。「10」という意味ではなく、1.4e-44 という意味です。

問題は、$s0 の整数を float に適切に変換していないことです。$s0 = 3 の場合を考えてみましょう。"sw $s0, p2" への呼び出しは、単にビット 0x00000003 をメモリ位置 p2 に置きます。ls "$f6, p2" を呼び出すと、同じビットが $f6 に格納されます。ただし、0x00000003 は浮動小数点数としての「3」を意味するのではなく、4.2x10-45 を意味します。

于 2012-10-16T13:58:49.687 に答える