gpt4 book ai didi

rust - 对于 float ,如何实现三个中两个最大数的平方和?

转载 作者:行者123 更新时间:2023-11-29 08:14:48 26 4
gpt4 key购买 nike

本书的练习 1.3 Structure and Interpretation of Computer Programs问以下问题:

Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers.

我已经设法回答了这个问题,但仅限于整数:

use std::cmp;

fn sum_square_largest(x:isize, y:isize, z:isize) -> isize {
x * x + y * y + z * z - min_three(x, y, z) * min_three(x, y, z)
}

fn min_three<T>(v1: T, v2: T, v3: T) -> T where T: Ord {
cmp::min(v1, cmp::min(v2, v3))
}

但是当我将 sum_square_largest 函数更改为:

fn sum_square_largest(x:f64, y:f64, z:f64) -> f64 {
x * x + y * y + z * z - min_three(x, y, z) * min_three(x, y, z)
}

它给出了以下错误:特征“core::cmp::Ord”没有为类型“f64”实现[E0277]

这是什么?我如何定义此函数以处理 float ?

最佳答案

float 不实现 Ord,因为它们没有总排序。 NaN 与任何值(包括另一个 NaN)进行比较时为假。

如果你在夜间使用 Rust,你可以使用 partial_min ,这使得这类情况变得明确。

你也可以决定在类似NaN的情况下做什么,然后在f64上实现一个包装器类型,并实现Ord 对于它,这样它就可以处理这种情况。

关于rust - 对于 float ,如何实现三个中两个最大数的平方和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29496191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com