Край диапазона при переводе в Rust
Дробное, не влезающее в выбранный целый диапазон, при переводе прилипает к краю типа. Это не сужение битов по кругу, как у целого к короткому целому.
Слишком большое по модулю значение дает максимум или минимум целевого типа. Слишком маленькое по модулю после отбрасывания дроби ведет себя как обычное приведение дробного к целому.
Переведем очень большое дробное в i32
и выведем результат:
let n = 1e20f64 as i32;
println!("{}", n);
На экране будет верхний край i32,
а не исходная величина 1e20. Так
компилятор фиксирует выход за диапазон
при приведении дробного к целому.
Дано число:
let num = 1e30;
Переведите его в i32 и выведите
результат. Скажите, похож ли он на исходное.
Скажите, чем такое приведение отличается
от перевода 300 в короткое целое.
Скажите, что получится на краю типа, если
перевести слишком большое дробное в i32.