标签: cordic

如何以所有可用精度打印Rust浮点数?

我正在实现sin三角函数的CORDIC算法.为了做到这一点,我需要硬编码/计算一堆反正切值.现在我的功能似乎可以工作(由Wolfram Alpha验证)到打印的精度,但我希望能够打印我的所有32位精度f32.我该怎么办?

fn generate_table() {
    let pi: f32 = 3.1415926536897932384626;
    let k1: f32 = 0.6072529350088812561694; // 1/k
    let num_bits: uint = 32;
    let num_elms: uint = num_bits;
    let mul: uint = 1 << (num_bits - 2);

    println!("Cordic sin in rust");
    println!("num bits {}", num_bits);
    println!("pi is {}", pi);
    println!("k1 is {}", k1);

    let shift: f32 = 2.0;
    for ii in range(0, num_bits) {
        let ipow: f32 = 1.0 / shift.powi(ii as i32);
        let cur: …
Run Code Online (Sandbox Code Playgroud)

formatting rust cordic

9
推荐指数
2
解决办法
3917
查看次数

如何使用 CORDIC 计算 [-1, 1] 之外的数字的指数?

我无法理解计算范围 [-1, 1) 之外的数字的指数背后的数学原理(实际上我不确定使用 CORDIC 计算 exp 的最佳范围是什么,我在某个地方读过 [-pi/4, pi/4] 和其他人我读过 [-1, 1)) 使用 CORDIC 算法。有人可以举个例子吗?

\n\n

我在http://zone.ni.com/reference/en-XX/help/371599G-01/lvfpga/ht_exponential/阅读了以下声明:

\n\n

“x 必须在 [\xe2\x80\x931, 1) 范围内。要在 x 超出此范围时计算 exp(x),请找到一个整数 q 和一个实数 r,其中 r 在 [0, ln(2)),使得 x = q \xc3\x97 ln(2) + r。然后您可以计算 2^q \xc3\x97 exp(r),这相当于 exp(x)。因为 r 是在[\xe2\x80\x931, 1)的有效范围内,可以使用该函数计算exp(r)。"

\n\n

但如何找到 q 和 r 对我来说没有多大意义?

\n\n

我发现的第二种方法是在http://www.xilinx.com/support/documentation/application_notes/xapp552-cordic-floating-point-operations.pdf,它告诉我们在将数字分为整数和小数部分后使用方程:

\n\n
cosh(int + frac) = cosh(int) * cosh(frac) + sinh(int) * sinh(frac)\nsinh(int + frac) = cosh(int) * sinh(frac) + cosh(frac) * …
Run Code Online (Sandbox Code Playgroud)

verilog hdl cordic

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

标签 统计

cordic ×2

formatting ×1

hdl ×1

rust ×1

verilog ×1