【发布时间】:2020-09-01 21:47:16
【问题描述】:
我有一个独特的场景,我想使用f64 作为HashMap 中的键。特别是我知道f64 永远不会是NaN,我可以容忍f64s 应该是相等的,但不是。所以我transmute()f64 到u64。但是,当我将u64 从HashMap 和transmute() 拉回f64 时,它是一个不同的值。下面和playground上的代码。
use std::collections::HashMap;
fn main() {
let x = 5.0;
let y: u64 = unsafe { std::mem::transmute(x) };
let x: f64 = unsafe { std::mem::transmute(y) };
println!("y: {}, x: {}", y, x);
let mut hash = HashMap::new();
hash.insert(y, 8);
for (y, _) in &hash {
let x: f64 = unsafe { std::mem::transmute(y) };
println!("y: {}, x: {}", y, x);
}
}
我错过了什么?
【问题讨论】: