关于Rust f32精度的问题
这里是一段Rust 代码
`#[derive(Debug)]
struct Point {
x: f32,
y: f32,
}
#[derive(Debug)]
struct Rectangle {
p1: Point,
p2: Point,
}
impl Rectangle {
fn rect_area(&self) -> f32 {
let width = (self.p1.x - self.p2.x).abs();
let height = (self.p1.y - self.p2.y).abs();
println!(
"nwidth is{} - {} = {}, height is{}-{} = {}",
self.p1.x, self.p2.x, &width, self.p1.y, self.p2.y, &height
);
width * height
}
}
fn square(p: Point, num: f32) -> Rectangle {
let p2 = Point {
x: p.x + num,
y: p.y + num,
};
Rectangle { p1: p, p2 }
}
pub fn struct_fn() {
let p = Point { x: 3.3, y: 4.4 };
let new_r = square(p, 1.1);
print!("{:?}", &new_r);
print!("{:?}", new_r.rect_area())
}`
结果:
Rectangle { p1: Point { x: 3.3, y: 4.4 }, p2: Point { x: 4.4, y: 5.5 } }
width is3.3 - 4.4 = 1.1000001, height is4.4-5.5 = 1.0999999
1.21
这里打印出来的长宽 都应该是1.1, 然后乘积又是准确的
嗯...
不是很明白这个..
有大佬能解答这个问题吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
二进制存储的精度问题,可参考IEEE 754格式是什么?