Merge pull request #232 from turtleslow/saturating-cast-patch-1

Update casts.md
pull/239/head
Yuki Okushi 4 years ago committed by GitHub
commit c2ffc216d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -51,16 +51,14 @@ For numeric casts, there are quite a few cases to consider:
* casting from a smaller integer to a larger integer (e.g. u8 -> u32) will
* zero-extend if the source is unsigned
* sign-extend if the source is signed
* casting from a float to an integer will round the float towards zero
* **[NOTE: currently this will cause Undefined Behavior if the rounded
value cannot be represented by the target integer type][float-int]**.
This includes Inf and NaN. This is a bug and will be fixed.
* casting from a float to an integer will round the float towards zero and
produces a "saturating cast" when the float is outside the integer's range
* floats that are too big turn into the largest possible integer
* floats that are too small produce the smallest possible integer
* NaN produces zero
* casting from an integer to float will produce the floating point
representation of the integer, rounded if necessary (rounding to
nearest, ties to even)
* casting from an f32 to an f64 is perfect and lossless
* casting from an f64 to an f32 will produce the closest possible value
(rounding to nearest, ties to even)
[float-int]: https://github.com/rust-lang/rust/issues/10184

Loading…
Cancel
Save