萌えハッカーニュースリーダー

2025/06/17 07:50 A real fixed-point decimal crate in Rust

出典: https://github.com/WuBingzheng/primitive_fixed_point_decimal
hakase
博士

やあ、ロボ子。今日はRustのdecimal型についての話じゃ。

roboko
ロボ子

decimal型ですか。どのようなお話でしょう、博士?

hakase
博士

Rustの`f32`や`f64`型は、10進数を正確に表現できないという問題があるのじゃ。そこで、このcrateは固定小数点decimal型を提供して、その問題を解決するらしいぞ。

roboko
ロボ子

なるほど。`f32`や`f64`は浮動小数点数なので、どうしても誤差が出てしまいますものね。固定小数点数を使うことで、正確な10進数表現が可能になるのですね。

hakase
博士

そうじゃ。このcrateでは、整数型とスケールファクターを使って10進数を表現する。スケールを静的に指定することで、精度も保証されるらしい。

roboko
ロボ子

スケールを静的に指定するというのは、コンパイル時にスケールが決まるということでしょうか?

hakase
博士

その通り!`ConstScaleFpdec<i64, 4>`のように、型レベルでスケールを指定する方法があるぞ。他にも、`OobScaleFpdec<i64>`のように、スケールを型に含めず、別途管理する方法もあるらしい。

roboko
ロボ子

`ConstScaleFpdec`はコンパイル時にスケールが決まるので、よりパフォーマンスが良いかもしれませんね。`OobScaleFpdec`は実行時にスケールを柔軟に変更できる利点がありそうですね。

hakase
博士

`+`, `-`, 比較演算は、同じ型、同じスケール間でのみ実行可能とのことじゃ。`*`, `/`演算は、異なる型、スケール間での演算が可能で、結果のスケールを指定できる。

roboko
ロボ子

スケールが異なる数値同士の演算ができるのは便利ですね。結果のスケールを指定できるのも、精度をコントロールできて良いですね。

hakase
博士

ただし、複数の乗算、除算により累積誤差が発生する可能性があるらしい。`cum_error`パラメータを使用することで、累積誤差を制御できるとのことじゃ。

roboko
ロボ子

累積誤差は注意が必要ですね。`cum_error`パラメータで制御できるのはありがたいです。

hakase
博士

`serde`フィーチャーを有効にすると、`Serialize`と`Deserialize`トレイトが利用可能になるらしいぞ。データのシリアライズ・デシリアライズが簡単にできるのは便利じゃな。

roboko
ロボ子

`serde`対応は、JSONなどの形式でデータを保存したり、ネットワーク経由で送信したりする際に非常に役立ちますね。

hakase
博士

このcrateを使えば、金融関係の計算とか、正確な10進数が必要な場面で大活躍間違いなしじゃ!

roboko
ロボ子

そうですね。浮動小数点数の誤差に悩まされることなく、安心して計算できますね。

hakase
博士

ところでロボ子、このcrateの名前、`fpdec`って言うんだけど、これって「ふっぺでっく」って読むのかしら?

roboko
ロボ子

おそらく、「エフピーデック」と読むのが一般的だと思いますよ、博士。

hakase
博士

なーんだ、つまらんのじゃ。じゃあ、私は「ふっぺでっく」って呼ぶことにする!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search