2

C# で簡単なdivide関数を作成しました。

    private string divide(int a, int b)
    {
        return string.Format("Result: {0}", a / b);
    }

を呼び出すMessageBox.Show(divide(3, 0))と、予想どおり、DivideByZeroException.

aそこで、次のように (整数以外の戻り値を取得するために) floatに型キャストすることにしました。

    private string divide(int a, int b)
    {
        return string.Format("Result: {0}", (float)a / b);
    }

奇妙なことに、これでResult: Infinityが表示されます。

私は間違っているかもしれませんが、これは私にはバグのように思えます。結果がフロートになり、本質的に戻り値3 / 1 x 10^-99999または同様のものと見なされるためですか?

この結果にはかなりビックリしています。

4

3 に答える 3

3

intに変換したときの動作ですfloat。これは、MSDNのドキュメントから取得したものです。

浮動小数点値をゼロで除算すると、IEEE 754 演算の規則に従って、正の無限大、負の無限大、または非数 (NaN) のいずれかになります。浮動小数点演算が例外をスローすることはありません。詳細については、SingleおよびDoubleを参照してください。

于 2011-10-17T13:26:35.827 に答える
2

算術オーバーフローセクションのMSDNから:

浮動小数点型は IEEE 754 に基づいており、無限大と NaN (非数) を表現するための規定があるため、浮動小数点算術オーバーフローまたはゼロ除算が例外をスローすることはありません。

于 2011-10-17T13:22:34.500 に答える
1

いいえ、正しい float 操作の場合。

ほぼすべての最新の浮動小数点ユニットでサポートされている IEEE 浮動小数点標準では、ゼロによる除算を含むすべての浮動小数点算術演算の結果が明確に定義されていることが規定されています。この規格では、符号付きゼロ、無限大、および NaN (非数) がサポートされています。+0 (正のゼロ) と -0 (負のゼロ) の 2 つのゼロがあり、除算時のあいまいさがなくなります。IEEE 754 演算では、a ÷ +0 は、a が正の場合は正の無限大、a が負の場合は負の無限大、a = ±0 の場合は NaN です。代わりに、-0 で除算すると、無限大の符号が変わります。

参照

于 2011-10-17T13:22:31.617 に答える