gpt4 book ai didi

performance - 在没有 panic 的情况下处理整数除法/余数溢出的最快方法是什么?

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

我还在进步overflower处理整数溢出。一个目标是能够使用 #[overflow(wrap)] 来避免溢出时的 panic 。但是,我发现标准整数类型的 .wrapping_div(_).wrapping_rem(_) 函数在除以零时实际上会出现 panic。编辑:为了更好地激发这个用例:在中断处理程序中,我们绝对想避免 panic 。我假设被零除的情况极不可能发生,但我们仍然需要为某些有效定义返回一个“有效”值。

一个可能的解决方案是使值饱和(当代码用 #[overflow(saturate)] 注释时我会这样做),但这可能相对较慢(特别是因为其他更多操作也饱和)。所以我想添加一个 #[overflow(no_panic)] 模式来完全避免 panic ,并且在所有情况下几乎和 #[overflow(wrap)] 一样快。

我的问题是:返回某物(不关心什么)而不用担心被零除(或得到余数)的最快方法是什么?

最佳答案

免责声明:这并不是一个严肃的回答。它几乎肯定比使用 if 语句检查除数是否为零的简单解决方案慢。

#![feature(asm)]

fn main() {
println!("18 / 3 = {}", f(18, 3));
println!("2555 / 10 = {}", f(2555, 10));
println!("-16 / 3 = {}", f(-16, 3));
println!("7784388 / 0 = {}", f(7784388, 0));
}

fn f(x: i32, y: i32) -> i32 {
let z: i32;
unsafe {
asm!(
"
test %ecx, %ecx
lahf
and $$0x4000, %eax
or %eax, %ecx
mov %ebx, %eax
cdq
idiv %ecx
"
: "={eax}"(z)
: "{ebx}"(x), "{ecx}"(y)
: "{edx}"
);
}
z
}

Rust Playground

关于performance - 在没有 panic 的情况下处理整数除法/余数溢出的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170718/

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