gpt4 book ai didi

rust - 省略 'NaN' 值的 f32::NAN rust 闭包的值

转载 作者:行者123 更新时间:2023-11-29 08:23:16 24 4
gpt4 key购买 nike

我有以下闭包。

let ss = aa.iter().fold(0., |sum: f32,x| if *x != f32::NAN { sum + e } else { sum + 0. })

我正在尝试对所有省略 f32::NAN 的值求和(如果在向量中有的话)(我在向量中有几个 NaN 值)。

但是,我的返回给了我 NaN 值,因为我的条件 if *x != f32::NAN 似乎无效。因为,以下闭包生成原始向量而不是省略 NaN 值。

let bb = aa.iter().filter(|x| **x != f32::NAN).map(|x| x)

我的问题是,如何在 if 条件下匹配 f32::NAN 值?从更广泛的角度来看,如何在向量中省略 NaN 值?

最佳答案

您不能以这种方式检查 NaN,因为 NaN == NaN 的计算结果为 false。使用 f32::is_nan反而。此外,您可以使用 Iterator::filter过滤掉迭代器和 Iterator::sum 的元素对所有值求和。

这会产生这段代码 ( Playground ):

let aa = [3.14f32, std::f32::NAN, 2.71, 27.99];
let ss = aa.iter()
.filter(|n| !n.is_nan())
.sum::<f32>();

println!("{}", ss);

关于rust - 省略 'NaN' 值的 f32::NAN rust 闭包的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979463/

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