Crates.io | irox-fixedmath |
lib.rs | irox-fixedmath |
version | 0.1.1 |
source | src |
created_at | 2024-09-29 17:49:12.222626 |
updated_at | 2024-10-24 23:24:02.512757 |
description | Fixed Precision Math Primitives |
homepage | https://github.com/spmadden/irox |
repository | https://github.com/spmadden/irox |
max_upload_size | |
id | 1391026 |
size | 34,420 |
Fixed Precision Math Primitives
Wikipedia's article on Fixed-point arithmetic
All of the fractional components are scaled by the max value of the fractional size.
Works acceptably well:
FixedU32
- Q16.16 - u16
/u16
FixedI32
- Q15.16 - i16
/u16
1/u16::MAX
~= 1.5259e-5
or 0.000_015_259
, or about 15.3 micro
, and can accurately represent SI-prefixes: milli/1e-3
with no loss of accuracy.FixedU64
- Q32.32 - u32
/u32
FixedI64
- Q31.32 - i32
/u32
1/u32::MAX
~= 2.328306e-10
or 0.000_000_000_238_306
, or about 238.3 pico
, and can accurately represent SI-prefixes milli/1e-3
, micro/1e-6
, and nano/1e-9
with no loss of accuracy.Beta quality/Some known issues:
FixedU128
- Q64.64 - u64
/u64
[1]FixedI128
- Q63.64 - i64
/u64
[1]
1/u64::MAX
] ~= 5.4210e-20
or 0.000_000_000_000_000_000_054_210
, or about 54.2 zepto
, and can accurately represent SI-prefixes milli/1e-3
, micro/1e-6
, nano/1e-9
, pico/1e-12
, femto/1e-15
, and atto/1e-18
with no loss of accuracy.[1]: Multiplication doesn't roll over properly, so FloatExt
aren't supported.