C# では、メソッドは値をMath.Ceiling
返しdouble
ます。戻らないのはなぜint
ですか?
5 に答える
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 ビットしかない) 内に収まりません。
ドキュメントには、戻り値について次のように記載されています。
a 以上の最小の整数。a が NaN、NegativeInfinity、または PositiveInfinity と等しい場合、その値が返されます。
したがって、NaN、NegativeInfinity、PositiveInfinity は Double のフィールドであるため、戻り値は double でなければなりません。
Math.Ceiling
double
渡された型に応じて、 aまたは a のいずれかを返すことができますdecimal
。つまり、メソッドの出力型は入力型と (かなり賢明に) 一致します。
int
を受け取ってを返す3 番目のオーバーロードを追加することもできましたがint
、これにはあまり意味がありませんでした。関数は常にその入力を返すだけでした。
の目的はMath.Ceiling
浮動小数点値を整数にキャストすることであると想定しているようですが、通常、それは使用方法ではありません。
完全にするためには double を返さなければなりません。NaN を含む演算は常に NaN を返します。したがって、NaN を Ceiling() 関数に渡すと、Int には同等のものがないため、NaN を返すことはできません。また、 Double の範囲がより広い場合、範囲外の整数値に対して何が返されるでしょうか? +/- inf に対して何を返しますか?
またはdouble
より大きい数値を含むことができるためです。fromへの暗黙のキャストがないのと同じ理由です。int
long
double
int