1 个不稳定版本
使用旧版Rust 2015
0.0.1 | 2017年6月7日 |
---|
4 在 #分数
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