2016-03-26 5 views

答えて

4

convクレートはこれを処理するように設計されています。 ValueFrom/ValueInto形質は、入力値を出力タイプで正確に表現できない場合にエラーを返す値保存型変換を実行します。たとえば、次のように

/*! 
Add this to your `Cargo.toml`: 

```cargo 
[dependencies] 
conv = "0.3.2" 
``` 
*/ 
extern crate conv; 

use conv::prelude::*; 

fn main() { 
    let a = std::u32::MAX; 
    println!("u32::MAX -> f32: {:?}", a.value_as::<f32>()); 
    println!("u32::MAX -> f64: {:?}", a.value_as::<f64>()); 
} 

出力:

u32::MAX -> f32: Err(PosOverflow(..)) 
u32::MAX -> f64: Ok(4294967295) 

代わりに、あなたがチェックconvを複製することができますが、手で行います。入力整数は整数の範囲外の浮動小数点型を正確にすることができ該当しないことを確認してください表す。具体的に:

  • f32:16777215
  • f64±:9,007,199,254,740,991
±
4

64ビットの浮動小数点表現は正確に15–17 significant decimal digitsです。そのため、潜在的な不正確さを見積もることができます。 となります。そのような浮動小数点表示の誤差範囲はxであるため、その特定のビット列はself - xからself + xまでの範囲の値を表しますが、それほど有用な概念ではありませんあなたを助ける多くのコードを見つける可能性は低いでしょう。

関連する問題