当我尝试在 Rust 中使用求幂运算符时,它给出了奇怪的结果。为什么?
When I try to use the exponentiation operator in Rust, it gives strange results. Why?
我正在尝试在 Rust 中实现复杂步骤微分。但是,当将复数提高到大于 2 的幂时,我得到的结果与 Julia 完全不同。该算法在 Julia 中适用于任何函数,但在 Rust 中,它仅适用于二阶函数。
以下是我用两种语言计算虚数的幂的方法。
生锈:
let x: f64 = 1.0;
let h: f64 = f64::from(1*10^-8);
println!("Result = {:?}", (num::pow(Complex::new(x,h),3));
// Complex { re: -587.0, im: 2702.0 }
朱莉娅:
h = 1*10^-8
x = 1
println((x+im*h)^3)
# 0.9999999999999997 + 3.000000000000001e-8im
我不知道该怎么做,所以非常欢迎任何帮助。
Rust 没有求幂运算符。
二元运算符^
不是求幂,而是按位异或。这是一个仅为整数类型定义的操作,它 returns 其设置位集合是操作数的设置位集合的对称差的数字。 1 * 10 ^ -8
因此计算(假设 32 位有符号类型,这是默认情况下分配给此表达式的类型推断)0x0000000a
⊕ 0xfffffff8
,即 0xfffffff2
,即 - 14.
如果要用指数表示法指定浮点数,可以使用E表示法:
let h: f64 = 1e-8;
对于任意取幂,既然你已经有了 num
箱子,你不妨使用 num::pow
.
我正在尝试在 Rust 中实现复杂步骤微分。但是,当将复数提高到大于 2 的幂时,我得到的结果与 Julia 完全不同。该算法在 Julia 中适用于任何函数,但在 Rust 中,它仅适用于二阶函数。
以下是我用两种语言计算虚数的幂的方法。
生锈:
let x: f64 = 1.0;
let h: f64 = f64::from(1*10^-8);
println!("Result = {:?}", (num::pow(Complex::new(x,h),3));
// Complex { re: -587.0, im: 2702.0 }
朱莉娅:
h = 1*10^-8
x = 1
println((x+im*h)^3)
# 0.9999999999999997 + 3.000000000000001e-8im
我不知道该怎么做,所以非常欢迎任何帮助。
Rust 没有求幂运算符。
二元运算符^
不是求幂,而是按位异或。这是一个仅为整数类型定义的操作,它 returns 其设置位集合是操作数的设置位集合的对称差的数字。 1 * 10 ^ -8
因此计算(假设 32 位有符号类型,这是默认情况下分配给此表达式的类型推断)0x0000000a
⊕ 0xfffffff8
,即 0xfffffff2
,即 - 14.
如果要用指数表示法指定浮点数,可以使用E表示法:
let h: f64 = 1e-8;
对于任意取幂,既然你已经有了 num
箱子,你不妨使用 num::pow
.