mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-08 13:03:39 +00:00
runtime: add support for math package
The math package uses routines written in Go assembly language which LLVM/Clang cannot parse. Additionally, not all instruction sets are supported. Redirect all math functions written in assembly to their Go equivalent. This is not the fastest option, but it gets packages requiring math functions to work.
This commit is contained in:
committed by
Ron Evans
parent
0757eb5919
commit
6360e318a7
Vendored
+46
@@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import "math"
|
||||
|
||||
func main() {
|
||||
for _, n := range []float64{0.3, 1.5, 2.6, -1.1, -3.1, -3.8} {
|
||||
println("n:", n)
|
||||
println(" asin: ", math.Asin(n))
|
||||
println(" asinh: ", math.Asinh(n))
|
||||
println(" acos: ", math.Acos(n))
|
||||
println(" acosh: ", math.Acosh(n))
|
||||
println(" atan: ", math.Atan(n))
|
||||
println(" atanh: ", math.Atanh(n))
|
||||
println(" atan2: ", math.Atan2(n, 0.2))
|
||||
println(" cbrt: ", math.Cbrt(n))
|
||||
println(" ceil: ", math.Ceil(n))
|
||||
println(" cos: ", math.Cos(n))
|
||||
println(" cosh: ", math.Cosh(n))
|
||||
println(" erf: ", math.Erf(n))
|
||||
println(" erfc: ", math.Erfc(n))
|
||||
println(" exp: ", math.Exp(n))
|
||||
println(" expm1: ", math.Expm1(n))
|
||||
println(" exp2: ", math.Exp2(n))
|
||||
println(" floor: ", math.Floor(n))
|
||||
f, e := math.Frexp(n)
|
||||
println(" frexp: ", f, e)
|
||||
println(" hypot: ", math.Hypot(n, n*2))
|
||||
println(" ldexp: ", math.Ldexp(n, 2))
|
||||
println(" log: ", math.Log(n))
|
||||
println(" log1p: ", math.Log1p(n))
|
||||
println(" log10: ", math.Log10(n))
|
||||
println(" log2: ", math.Log2(n))
|
||||
println(" max: ", math.Max(n, n+1))
|
||||
println(" min: ", math.Min(n, n+1))
|
||||
println(" mod: ", math.Mod(n, n+1))
|
||||
i, f := math.Modf(n)
|
||||
println(" modf: ", i, f)
|
||||
println(" pow: ", math.Pow(n, n))
|
||||
println(" remainder:", math.Remainder(n, n+0.2))
|
||||
println(" sin: ", math.Sin(n))
|
||||
println(" sinh: ", math.Sinh(n))
|
||||
println(" tan: ", math.Tan(n))
|
||||
println(" tanh: ", math.Tanh(n))
|
||||
println(" trunc: ", math.Trunc(n))
|
||||
}
|
||||
}
|
||||
Vendored
+216
@@ -0,0 +1,216 @@
|
||||
n: +3.000000e-001
|
||||
asin: +3.046927e-001
|
||||
asinh: +2.956730e-001
|
||||
acos: +1.266104e+000
|
||||
acosh: NaN
|
||||
atan: +2.914568e-001
|
||||
atanh: +3.095196e-001
|
||||
atan2: +9.827937e-001
|
||||
cbrt: +6.694330e-001
|
||||
ceil: +1.000000e+000
|
||||
cos: +9.553365e-001
|
||||
cosh: +1.045339e+000
|
||||
erf: +3.286268e-001
|
||||
erfc: +6.713732e-001
|
||||
exp: +1.349859e+000
|
||||
expm1: +3.498588e-001
|
||||
exp2: +1.231144e+000
|
||||
floor: +0.000000e+000
|
||||
frexp: +6.000000e-001 -1
|
||||
hypot: +6.708204e-001
|
||||
ldexp: +1.200000e+000
|
||||
log: -1.203973e+000
|
||||
log1p: +2.623643e-001
|
||||
log10: -5.228787e-001
|
||||
log2: -1.736966e+000
|
||||
max: +1.300000e+000
|
||||
min: +3.000000e-001
|
||||
mod: +3.000000e-001
|
||||
modf: +0.000000e+000 +3.000000e-001
|
||||
pow: +6.968453e-001
|
||||
remainder: -2.000000e-001
|
||||
sin: +2.955202e-001
|
||||
sinh: +3.045203e-001
|
||||
tan: +3.093362e-001
|
||||
tanh: +2.913126e-001
|
||||
trunc: +0.000000e+000
|
||||
n: +1.500000e+000
|
||||
asin: NaN
|
||||
asinh: +1.194763e+000
|
||||
acos: NaN
|
||||
acosh: +9.624237e-001
|
||||
atan: +9.827937e-001
|
||||
atanh: NaN
|
||||
atan2: +1.438245e+000
|
||||
cbrt: +1.144714e+000
|
||||
ceil: +2.000000e+000
|
||||
cos: +7.073720e-002
|
||||
cosh: +2.352410e+000
|
||||
erf: +9.661051e-001
|
||||
erfc: +3.389485e-002
|
||||
exp: +4.481689e+000
|
||||
expm1: +3.481689e+000
|
||||
exp2: +2.828427e+000
|
||||
floor: +1.000000e+000
|
||||
frexp: +7.500000e-001 1
|
||||
hypot: +3.354102e+000
|
||||
ldexp: +6.000000e+000
|
||||
log: +4.054651e-001
|
||||
log1p: +9.162907e-001
|
||||
log10: +1.760913e-001
|
||||
log2: +5.849625e-001
|
||||
max: +2.500000e+000
|
||||
min: +1.500000e+000
|
||||
mod: +1.500000e+000
|
||||
modf: +1.000000e+000 +5.000000e-001
|
||||
pow: +1.837117e+000
|
||||
remainder: -2.000000e-001
|
||||
sin: +9.974950e-001
|
||||
sinh: +2.129279e+000
|
||||
tan: +1.410142e+001
|
||||
tanh: +9.051483e-001
|
||||
trunc: +1.000000e+000
|
||||
n: +2.600000e+000
|
||||
asin: NaN
|
||||
asinh: +1.683743e+000
|
||||
acos: NaN
|
||||
acosh: +1.609438e+000
|
||||
atan: +1.203622e+000
|
||||
atanh: NaN
|
||||
atan2: +1.494024e+000
|
||||
cbrt: +1.375069e+000
|
||||
ceil: +3.000000e+000
|
||||
cos: -8.568888e-001
|
||||
cosh: +6.769006e+000
|
||||
erf: +9.997640e-001
|
||||
erfc: +2.360344e-004
|
||||
exp: +1.346374e+001
|
||||
expm1: +1.246374e+001
|
||||
exp2: +6.062866e+000
|
||||
floor: +2.000000e+000
|
||||
frexp: +6.500000e-001 2
|
||||
hypot: +5.813777e+000
|
||||
ldexp: +1.040000e+001
|
||||
log: +9.555114e-001
|
||||
log1p: +1.280934e+000
|
||||
log10: +4.149733e-001
|
||||
log2: +1.378512e+000
|
||||
max: +3.600000e+000
|
||||
min: +2.600000e+000
|
||||
mod: +2.600000e+000
|
||||
modf: +2.000000e+000 +6.000000e-001
|
||||
pow: +1.199308e+001
|
||||
remainder: -2.000000e-001
|
||||
sin: +5.155014e-001
|
||||
sinh: +6.694732e+000
|
||||
tan: -6.015966e-001
|
||||
tanh: +9.890274e-001
|
||||
trunc: +2.000000e+000
|
||||
n: -1.100000e+000
|
||||
asin: NaN
|
||||
asinh: -9.503469e-001
|
||||
acos: NaN
|
||||
acosh: NaN
|
||||
atan: -8.329813e-001
|
||||
atanh: NaN
|
||||
atan2: -1.390943e+000
|
||||
cbrt: -1.032280e+000
|
||||
ceil: -1.000000e+000
|
||||
cos: +4.535961e-001
|
||||
cosh: +1.668519e+000
|
||||
erf: -8.802051e-001
|
||||
erfc: +1.880205e+000
|
||||
exp: +3.328711e-001
|
||||
expm1: -6.671289e-001
|
||||
exp2: +4.665165e-001
|
||||
floor: -2.000000e+000
|
||||
frexp: -5.500000e-001 1
|
||||
hypot: +2.459675e+000
|
||||
ldexp: -4.400000e+000
|
||||
log: NaN
|
||||
log1p: NaN
|
||||
log10: NaN
|
||||
log2: NaN
|
||||
max: -1.000000e-001
|
||||
min: -1.100000e+000
|
||||
mod: -1.000000e-001
|
||||
modf: -1.000000e+000 -1.000000e-001
|
||||
pow: NaN
|
||||
remainder: -2.000000e-001
|
||||
sin: -8.912074e-001
|
||||
sinh: -1.335647e+000
|
||||
tan: -1.964760e+000
|
||||
tanh: -8.004990e-001
|
||||
trunc: -1.000000e+000
|
||||
n: -3.100000e+000
|
||||
asin: NaN
|
||||
asinh: -1.849604e+000
|
||||
acos: NaN
|
||||
acosh: NaN
|
||||
atan: -1.258754e+000
|
||||
atanh: NaN
|
||||
atan2: -1.506369e+000
|
||||
cbrt: -1.458100e+000
|
||||
ceil: -3.000000e+000
|
||||
cos: -9.991352e-001
|
||||
cosh: +1.112150e+001
|
||||
erf: -9.999884e-001
|
||||
erfc: +1.999988e+000
|
||||
exp: +4.504920e-002
|
||||
expm1: -9.549508e-001
|
||||
exp2: +1.166291e-001
|
||||
floor: -4.000000e+000
|
||||
frexp: -7.750000e-001 2
|
||||
hypot: +6.931811e+000
|
||||
ldexp: -1.240000e+001
|
||||
log: NaN
|
||||
log1p: NaN
|
||||
log10: NaN
|
||||
log2: NaN
|
||||
max: -2.100000e+000
|
||||
min: -3.100000e+000
|
||||
mod: -1.000000e+000
|
||||
modf: -3.000000e+000 -1.000000e-001
|
||||
pow: NaN
|
||||
remainder: -2.000000e-001
|
||||
sin: -4.158066e-002
|
||||
sinh: -1.107645e+001
|
||||
tan: +4.161665e-002
|
||||
tanh: -9.959494e-001
|
||||
trunc: -3.000000e+000
|
||||
n: -3.800000e+000
|
||||
asin: NaN
|
||||
asinh: -2.045028e+000
|
||||
acos: NaN
|
||||
acosh: NaN
|
||||
atan: -1.313473e+000
|
||||
atanh: NaN
|
||||
atan2: -1.518213e+000
|
||||
cbrt: -1.560491e+000
|
||||
ceil: -3.000000e+000
|
||||
cos: -7.909677e-001
|
||||
cosh: +2.236178e+001
|
||||
erf: -9.999999e-001
|
||||
erfc: +2.000000e+000
|
||||
exp: +2.237077e-002
|
||||
expm1: -9.776292e-001
|
||||
exp2: +7.179365e-002
|
||||
floor: -4.000000e+000
|
||||
frexp: -9.500000e-001 2
|
||||
hypot: +8.497058e+000
|
||||
ldexp: -1.520000e+001
|
||||
log: NaN
|
||||
log1p: NaN
|
||||
log10: NaN
|
||||
log2: NaN
|
||||
max: -2.800000e+000
|
||||
min: -3.800000e+000
|
||||
mod: -1.000000e+000
|
||||
modf: -3.000000e+000 -8.000000e-001
|
||||
pow: NaN
|
||||
remainder: -2.000000e-001
|
||||
sin: +6.118579e-001
|
||||
sinh: -2.233941e+001
|
||||
tan: -7.735561e-001
|
||||
tanh: -9.989996e-001
|
||||
trunc: -3.000000e+000
|
||||
Reference in New Issue
Block a user