如何在Rust中解码和编码浮点数? [英] How to decode and encode a float in Rust?
本文介绍了如何在Rust中解码和编码浮点数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
num :: Float :: integer_decode()
,但我宁愿不会失去任何精度。也就是说,除非我编码的格式小于我当然编码的格式。 解释方法解释浮点数作为一个整数,打印出十六进制的值: use std :: mem;
fn main(){
let a_third:f64 = 1.0 / 3.0;
let as_int:u64 = unsafe {mem :: transmute(a_third)};
println!({},as_int);
let as_string = format!({:016x},as_int);
println!({},as_string);
let back_to_int = u64 :: from_str_radix(& as_string,16).expect(Not an integer);
println!({},back_to_int);
let back_to_float:f64 = unsafe {mem :: transmute(back_to_int)};
println!({},back_to_float);
assert_eq!(back_to_float,a_third);
}
I want to decode, store and encode a float in Rust. I know about num::Float::integer_decode()
but I'd rather not lose any precision. That is, unless the format I encode into is smaller than the format I encode from of course.
解决方案
Interpret the floating point bits as an integer and print out the value as hex:
use std::mem;
fn main() {
let a_third: f64 = 1.0 / 3.0;
let as_int: u64 = unsafe { mem::transmute(a_third) };
println!("{}", as_int);
let as_string = format!("{:016x}", as_int);
println!("{}", as_string);
let back_to_int = u64::from_str_radix(&as_string, 16).expect("Not an integer");
println!("{}", back_to_int);
let back_to_float: f64 = unsafe { mem::transmute(back_to_int) };
println!("{}", back_to_float);
assert_eq!(back_to_float, a_third);
}
这篇关于如何在Rust中解码和编码浮点数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文