问题描述
(i as f64).powf(2.0 / 5.0).floor() as u64
有没有办法不用浮点数就可以将整数提升到分数次幂?
(我可以执行两个单独的整数幂运算。它会溢出或失去很多精度,具体取决于顺序。)
解决方法
使用 num
板条箱避免精度损失:
use num::{BigUint,ToPrimitive};
BigUint::from(base)
.pow(exp_num)
.nth_root(exp_den)
.to_u64() // `.try_into()` works too -- import `TryInto` instead of `ToPrimitive`
.expect("result overflows u64")
为了达到完全准确,除了使用大整数外,您无能为力,所以如果您确实需要精度,请选择它。不过请注意性能——当指数的分子或分母很大时,这种计算非常昂贵。