[ACCEPTED]-Why Math.Ceiling returns double?-ceil
double has a greater value range than
The Double 14 value type represents a double-precision 13 64-bit number with values ranging from 12 negative 1.79769313486232e308 to positive 11 1.79769313486232e308, as well as positive 10 or negative zero, PositiveInfinity, NegativeInfinity, and 9 Not-a-Number (NaN).
Double complies with 8 the IEC 60559:1989 (IEEE 754) standard 7 for binary floating-point arithmetic.
That 6 standard says that
double has a 52-bit mantissa, which 5 means it can represent any integer up to 4 52 bits long without loss of precision.
Therefore 3 if the input is large enough, the output 2 doesn't fit inside an
int (which only has 32 1 bits).
The documentation says about the return 6 value:
The smallest whole number greater 5 than or equal to a. If a is equal to NaN, NegativeInfinity, or 4 PositiveInfinity, that value is returned.
Therefore 3 the return value has to be double since 2 NaN, NegativeInfinity and PositiveInfinity 1 are fields of Double.
Math.Ceiling can return either a
double or a
decimal, depending on 10 the type passed in. In other words, the 9 output type of the method matches the input 8 type (quite sensibly).
They could have added 7 a third overload that takes an
int and returns 6 an
int, but there wouldn't have been much point 5 to this - the function would always just 4 return its input.
You seem to be assuming 3 that the purpose of
Math.Ceiling is to cast a floating-point 2 value to an integer, but that's usually 1 not how it's used.
It has to return double in order to be complete. Any 8 math operation involving a NaN always returns 7 NaN. Thus if you pass a NaN to ceiling() function 6 one would not be able to return NaN, as 5 there is no equivalent in Int. Also given 4 that Double has a wider range what would 3 one return for those out of range integer 2 values ? What does one return for +/- inf 1 ?
double can contain larger numbers than 2
long. Same reason there's no implicit cast 1 from
More Related questions