[ ๐ 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