50

C# では、メソッドは値をMath.Ceiling返しdoubleます。戻らないのはなぜintですか?

4

5 に答える 5

32

doubleの値の範囲は より大きくなりますint:

Double 値型は、負の 1.79769313486232e308 から正の 1.79769313486232e308 までの範囲の値と、正または負のゼロ、PositiveInfinity、NegativeInfinity、Not-a-Number (NaN) の倍精度 64 ビット数値を表します。

Double は、バイナリ浮動小数点演算の IEC 60559:1989 (IEEE 754) 標準に準拠しています。

この標準ではdouble、仮数部が 52 ビットであると規定されています。つまり、精度を損なうことなく、最大 52 ビット長の任意の整数を表すことができます。

したがって、入力が十分に大きい場合、出力はint(32 ビットしかない) 内に収まりません。

于 2011-04-17T12:22:47.947 に答える
30

ドキュメントには、戻り値について次のように記載されています。

a 以上の最小の整数。a が NaN、NegativeInfinity、または PositiveInfinity と等しい場合、その値が返されます。

したがって、NaN、NegativeInfinity、PositiveInfinity は Double のフィールドであるため、戻り値は double でなければなりません。

于 2011-04-17T12:24:15.127 に答える
6

Math.Ceilingdouble渡された型に応じて、 aまたは a のいずれかを返すことができますdecimal。つまり、メソッドの出力型は入力型と (かなり賢明に) 一致します。

intを受け取ってを返す3 番目のオーバーロードを追加することもできましたがint、これにはあまり意味がありませんでした。関数は常にその入力を返すだけでした。

の目的はMath.Ceiling浮動小数点値を整数にキャストすることであると想定しているようですが、通常、それは使用方法ではありません。

于 2011-04-17T12:27:35.503 に答える
2

完全にするためには double を返さなければなりません。NaN を含む演算は常に NaN を返します。したがって、NaN を Ceiling() 関数に渡すと、Int には同等のものがないため、NaN を返すことはできません。また、 Double の範囲がより広い場合、範囲外の整数値に対して何が返されるでしょうか? +/- inf に対して何を返しますか?

于 2011-04-17T14:28:21.137 に答える
0

またはdoubleより大きい数値を含むことができるためです。fromへの暗黙のキャストがないのと同じ理由です。intlongdoubleint

于 2011-04-17T12:23:27.643 に答える