[ ๐ docs ] [ ๐ github ]
The fastest Go math library for constrained environments, like microcontrollers or WebAssembly.
- Optimizes for performance and small code size at the cost of precision.
- Uses float32 because most microcontrollers (like ESP32) have much faster computation for float32 than for float64.
- Designed and tested to work with both Go and TinyGo, hence the name.
- Most algorithms are ported from micromath Rust library.
- Zero dependency.
go get github.com/orsinium-labs/tinymath
fmt.Println(tinymath.Sin(tinymath.Pi))
Here is a comparison of WebAssembly binary size (built with TinyGo) when using tinymath vs stdlib math:
function | tinymath | stdlib | ratio |
---|---|---|---|
atan | 106 | 367 | 28% |
atan2 | 167 | 782 | 21% |
exp | 463 | 2722 | 17% |
fract | 166 | 154 | 107% |
hypot | 67 | 203 | 33% |
ln | 196 | 4892 | 4% |
powf | 701 | 9167 | 7% |
round | 129 | 171 | 75% |
sin | 125 | 1237 | 10% |
sqrt | 57 | 57 | 100% |
tan | 138 | 1137 | 12% |
trunc | 57 | 57 | 100% |
To reproduce: python3 size_bench.py