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

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: f32 = ipow.atan();
        println!("table values {}", cur);
    }
}

推荐答案

使用precision format specifier;a .,后面是您希望看到的精度小数点:

fn main() {
    let pi: f32 = 3.1415926536897932384626;
    let k1: f32 = 0.6072529350088812561694; // 1/k

    println!("pi is {:.32}", pi);
    println!("k1 is {:.32}", k1);
}

我 Select 了more个小数点中的32个.

pi is 3.14159274101257324218750000000000
k1 is 0.60725295543670654296875000000000

请注意,这些值不再匹配;floating point values are difficult! 正如在 comments 中提到的,你可能想要print as hexadecimal or even use your literals as hexadecimal.

Rust相关问答推荐

为什么是!为Rust中的RwLockReadGuard和RwLockWriteGuard实现的发送特征?

使用Rust s serde_json对混合数据类型进行优化'

制作一片连续整数的惯用Rust 方法?

在Rust中,如果Result是Err,运行副作用(如日志(log)记录)的惯用方法是什么

在自定义序列化程序中复制serde(With)的行为

Rust 的多态现象.AsRef与Derf

`*mut[T]`与`*mut T`的区别

JSON5中的变量类型(serde)

在文件链实施中绕过borrow 判断器

不同类型泛型的映射

在什么情况下 `..._or()` 比 `..._or_else(|| {})` 更好,为什么?

try 实现线程安全的缓存

当锁被释放时,将锁包装到作用域中是否会发生变化?

闭包返回类型的生命周期规范

decltype、dyn、impl traits,重构时如何声明函数的返回类型

为什么要这样编译?

无法理解 Rust 对临时值的不可变和可变引用是如何被删除的

Rust 函数指针似乎被borrow 判断器视为有状态的

为什么具有 Vec 变体的枚举没有内存开销?

Iterator::collect如何进行转换?