如何在Rust中解码和编码浮点数? [英] How to decode and encode a float in Rust?

查看:381
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆