#分数 #类型 #静态 #数值

nightly staticfraction

表示分数的数值数据类型;广义的定点数

1 个不稳定版本

使用旧版Rust 2015

0.0.1 2017年6月7日

4#分数

GPL-3.0 许可证

16KB
150

静态分数

如本crate中引入的静态分数是表示分数的数值数据类型,它们在内存中存储分子,在代码中存储分母。它们是定点数的推广。

例如(并非所有内容都已实现)

// The range 0-255 means voltages from 0V (0/1) to 1.25V (125/100).
StaticFractionType!(VoltageFromADC, 0u8, 255u8, 0, 1, 125, 100);

fn adc_read() -> VoltageFromADC {
    let adc_readout: u8 = lowlevel_adc_read();
    VoltageFromADC::new_from_stored(adc_readout)
}

let current = static_fraction(10, 1000); // 10mA
let resistance_at_zero = 100; // 100ohm
let resistance_per_deg = static_fraction(4, 100); // 0.04ohm/degC

let resistance = adc_read() / current;
let temperature = 0 + (resistance - resistance_at_zero) / resistance_per_deg; // in degC

if temperature > 30 { fan_on(); }
if temperature < 20 { fan_off(); }

想法是这样的

  • 原始数据可以以尽可能紧凑的数据类型存储
  • 任何数据都可以用于计算,而无需知道其单位
  • 所有操作都可以用整数运算完成(因此它们不会在没有浮点支持的情况下将浮点仿真拖到设备上)
  • 中间结果可以以紧凑的方式存储(目前完全不清楚如何在精度和存储之间做出权衡)

crate状态

该项目处于一个非常早期阶段,它首先试图证明在Rust中实现要达到的目标是可能的。

到目前为止,不同分数之间的比较几乎已全部实现,展示了如何存储和访问每个分数类型的参数。

依赖项

~390–620KB
~13K SLoC