数値の丸め処理

Rust:
数値の丸め処理

どのように:

Rustでは、数値の丸めが簡単です。f32f64型に対して、これらの方法を試してみてください:

fn main() {
    let num = 2.34567;

    // 最も近い整数へ丸める
    let round = num.round();
    println!("Round: {}", round); // Round: 2

    // Floor - 数値以下の最大の整数
    let floor = num.floor();
    println!("Floor: {}", floor); // Floor: 2

    // Ceil - 数値以上の最小の整数
    let ceil = num.ceil();
    println!("Ceil: {}", ceil); // Ceil: 3

    // Truncate - 小数部分を持たない整数部分
    let trunc = num.trunc();
    println!("Truncate: {}", trunc); // Truncate: 2

    // 10のべき乗の近い倍数に丸める
    let multiple_of_ten = (num * 100.0).round() / 100.0;
    println!("2桁の小数点まで丸めた: {}", multiple_of_ten); // 2桁の小数点まで丸めた: 2.35
}

奥深く

歴史的に、丸めは無限小数や無理数を限られたデジタル空間に収めるのに不可欠であり、メモリが不足していた古代のコンピュータにとっては必須でした。そう、そろばんみたいですが、より計算重視です。

ネイティブのRustメソッドに代わるものとしては、次のようなものがあります:

  1. デフォルトで丸める文字列フォーマッティングのformat!マクロ。
  2. よりきめ細かい制御を提供する外部クレート、例えばroundクレート。

内部では、Rustの丸め操作はIEEE規格に準拠しています—つまり、数学の先生が望むように丸められますという技術用語です。さらに、二進表現のため、0.1のような一部の数値は、二進数での無限の表現のため、伝統的な方法で丸めることができません。

参照

  • Rustのプリミティブ型メソッドについてのドキュメント:https://doc.rust-lang.org/std/primitive.f64.html
  • 浮動小数点演算のIEEE標準 (IEEE 754):https://ieeexplore.ieee.org/document/4610935
  • より複雑な丸めのための"round"クレート:https://crates.io/crates/round