关于Rust f32精度的问题

发布于 2022-09-12 13:17:24 字数 975 浏览 22 评论 0

这里是一段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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一瞬间的火花 2022-09-19 13:17:24

二进制存储的精度问题,可参考IEEE 754格式是什么?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文