相关疑难解决方法(0)

为什么IEEE 754保留了如此多的NaN值?

似乎IEEE 754标准将16,777,214个32位浮点值定义为NaN,或所有可能值的0.4%.

我想知道保留这么多有用值的理由是什么,而基本上只需要2个:一个用于信令,一个用于安静的NaN.

对不起,如果这个问题很简单,我在互联网上找不到任何解释.

floating-point nan ieee-754

40
推荐指数
2
解决办法
5835
查看次数

如何在Vec of Floats上进行二进制搜索?

如果你有,Vec<u32>你会使用该slice::binary_search方法.

由于我不理解的原因,f32并且f64没有实施Ord.由于基本类型来自标准库,因此您无法Ord自己实现它们,因此您似乎无法使用此方法.

你怎么能有效地做到这一点?

我真的必须包装f64一个包装器结构并Ord在其上实现吗?这样做似乎非常痛苦,并且涉及大量transmute不安全地来回传播数据块,实际上是没有理由的.

rust

16
推荐指数
3
解决办法
5764
查看次数

如何检查向量是否等于包含NaN和inf的另一个向量?

我师,在那里我有时需要检查我的结果要么是一个测试NaNinf,但它似乎是锈不考虑为NaN等于楠:

fn main() {
    let nan = "NaN".parse::<f64>().unwrap();
    println!("{:?}", nan);
    println!("{:?}", nan == nan);
} // NaN false
Run Code Online (Sandbox Code Playgroud)

如何比较含有NaN和无穷大的两个向量,看它们是否相等?

rust

5
推荐指数
2
解决办法
2736
查看次数

是否有相当于BTreeMap的C++比较器对象和依赖Ord的其他东西?

我似乎Ord无法用C++比较器对象的特性完成同样的事情.以简化更复杂的方案为例:

int epsilon = 0.001;
auto less = [epsilon](const double a, const double b) {
                if (fabs(a - b) > epsilon) {
                    return a < b;
                }
                else {
                    return false;
                }
            };
std::map<float, int, decltype(less)> myMap(less);
myMap.insert(std::make_pair(1.0, 1));
myMap.insert(std::make_pair(2.0, 2));
myMap.insert(std::make_pair(3.0, 3));

auto found = myMap.find(1.0001);
assert(found != myMap.end());
assert(found->second == 1);
Run Code Online (Sandbox Code Playgroud)

我想比较器有一些运行时上下文,比如epsilon值.我无法弄清楚你将如何做到这一点,BTreeMap因为我不能添加状态到Ord特征.是否有一些技术我还没想到要做同等的事情?

编辑

我的例子中有一个拼写错误,使我无法意识到C++实际上并没有起作用.我正在重新评估这个问题.

c++ floating-point rust data-structures

1
推荐指数
1
解决办法
203
查看次数

标签 统计

rust ×3

floating-point ×2

c++ ×1

data-structures ×1

ieee-754 ×1

nan ×1