summaryrefslogtreecommitdiff
path: root/src/lib/math
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-01-22 16:23:44 -0800
committerRuss Cox <rsc@golang.org>2009-01-22 16:23:44 -0800
commit29760f278cf9110e9e165af3f8aa53a89ff94f86 (patch)
treeece2442553c8681e8134d2201e6201e1e429adb8 /src/lib/math
parentca01b9bdc8fc325f98c57b1949942edfc00867f7 (diff)
downloadgolang-29760f278cf9110e9e165af3f8aa53a89ff94f86.tar.gz
move math routines from package sys to package math,
though they still build in src/runtime. use cgo instead of hand-written wrappers. R=r DELTA=740 (289 added, 300 deleted, 151 changed) OCL=23326 CL=23331
Diffstat (limited to 'src/lib/math')
-rw-r--r--src/lib/math/Makefile26
-rw-r--r--src/lib/math/asin.go4
-rw-r--r--src/lib/math/exp.go10
-rw-r--r--src/lib/math/floor.go6
-rw-r--r--src/lib/math/fmod.go8
-rw-r--r--src/lib/math/log.go10
-rw-r--r--src/lib/math/pow.go10
-rw-r--r--src/lib/math/sin.go4
-rw-r--r--src/lib/math/sqrt.go8
-rw-r--r--src/lib/math/tan.go4
10 files changed, 52 insertions, 38 deletions
diff --git a/src/lib/math/Makefile b/src/lib/math/Makefile
index d0debdbbc..623626e96 100644
--- a/src/lib/math/Makefile
+++ b/src/lib/math/Makefile
@@ -32,48 +32,56 @@ coverage: packages
$(AS) $*.s
O1=\
- exp.$O\
fabs.$O\
- floor.$O\
- fmod.$O\
hypot.$O\
pow10.$O\
- sqrt.$O\
+ runtime.$O\
const.$O\
O2=\
atan.$O\
+ exp.$O\
+ floor.$O\
+ fmod.$O\
log.$O\
sin.$O\
- sinh.$O\
+ sqrt.$O\
tan.$O\
O3=\
asin.$O\
atan2.$O\
pow.$O\
+ sinh.$O\
+
+O4=\
tanh.$O\
-math.a: a1 a2 a3
+math.a: a1 a2 a3 a4
a1: $(O1)
- $(AR) grc math.a exp.$O fabs.$O floor.$O fmod.$O hypot.$O pow10.$O sqrt.$O const.$O
+ $(AR) grc math.a fabs.$O hypot.$O pow10.$O runtime.$O const.$O
rm -f $(O1)
a2: $(O2)
- $(AR) grc math.a atan.$O log.$O sin.$O sinh.$O tan.$O
+ $(AR) grc math.a atan.$O exp.$O floor.$O fmod.$O log.$O sin.$O sqrt.$O tan.$O
rm -f $(O2)
a3: $(O3)
- $(AR) grc math.a asin.$O atan2.$O pow.$O tanh.$O
+ $(AR) grc math.a asin.$O atan2.$O pow.$O sinh.$O
rm -f $(O3)
+a4: $(O4)
+ $(AR) grc math.a tanh.$O
+ rm -f $(O4)
+
newpkg: clean
$(AR) grc math.a
$(O1): newpkg
$(O2): a1
$(O3): a2
+$(O4): a3
nuke: clean
rm -f $(GOROOT)/pkg/math.a
diff --git a/src/lib/math/asin.go b/src/lib/math/asin.go
index d39339ea1..cd3a0b7a0 100644
--- a/src/lib/math/asin.go
+++ b/src/lib/math/asin.go
@@ -24,7 +24,7 @@ func Asin(arg float64) float64 {
sign = true;
}
if arg > 1 {
- return sys.NaN();
+ return NaN();
}
temp = Sqrt(1 - x*x);
@@ -42,7 +42,7 @@ func Asin(arg float64) float64 {
func Acos(arg float64) float64 {
if arg > 1 || arg < -1 {
- return sys.NaN();
+ return NaN();
}
return Pi/2 - Asin(arg);
}
diff --git a/src/lib/math/exp.go b/src/lib/math/exp.go
index 0d06ff9cb..d781c1dec 100644
--- a/src/lib/math/exp.go
+++ b/src/lib/math/exp.go
@@ -101,12 +101,12 @@ func Exp(x float64) float64 {
// special cases
switch {
- case sys.IsNaN(x) || sys.IsInf(x, 1):
+ case IsNaN(x) || IsInf(x, 1):
return x;
- case sys.IsInf(x, -1):
+ case IsInf(x, -1):
return 0;
case x > Overflow:
- return sys.Inf(1);
+ return Inf(1);
case x < Underflow:
return 0;
case -NearZero < x && x < NearZero:
@@ -129,6 +129,6 @@ func Exp(x float64) float64 {
t := r * r;
c := r - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
y := 1 - ((lo - (r*c)/(2-c)) - hi);
- // TODO(rsc): make sure sys.Ldexp can handle boundary k
- return sys.Ldexp(y, k);
+ // TODO(rsc): make sure Ldexp can handle boundary k
+ return Ldexp(y, k);
}
diff --git a/src/lib/math/floor.go b/src/lib/math/floor.go
index 1cbdded47..cedecd1f6 100644
--- a/src/lib/math/floor.go
+++ b/src/lib/math/floor.go
@@ -4,6 +4,8 @@
package math
+import "math"
+
/*
* floor and ceil-- greatest integer <= arg
* (resp least >=)
@@ -11,13 +13,13 @@ package math
func Floor(arg float64) float64 {
if arg < 0 {
- d, fract := sys.Modf(-arg);
+ d, fract := Modf(-arg);
if fract != 0.0 {
d = d+1;
}
return -d;
}
- d, fract := sys.Modf(arg);
+ d, fract := Modf(arg);
return d;
}
diff --git a/src/lib/math/fmod.go b/src/lib/math/fmod.go
index f30ae3563..75e5eece2 100644
--- a/src/lib/math/fmod.go
+++ b/src/lib/math/fmod.go
@@ -4,6 +4,8 @@
package math
+import "math"
+
/*
* floating-point mod func without infinity or NaN checking
*/
@@ -16,7 +18,7 @@ func Fmod(x, y float64) float64 {
y = -y;
}
- yfr, yexp := sys.Frexp(y);
+ yfr, yexp := Frexp(y);
sign := false;
r := x;
if x < 0 {
@@ -25,11 +27,11 @@ func Fmod(x, y float64) float64 {
}
for r >= y {
- rfr, rexp := sys.Frexp(r);
+ rfr, rexp := Frexp(r);
if rfr < yfr {
rexp = rexp - 1;
}
- r = r - sys.Ldexp(y, rexp-yexp);
+ r = r - Ldexp(y, rexp-yexp);
}
if sign {
r = -r;
diff --git a/src/lib/math/log.go b/src/lib/math/log.go
index 76b5231e5..887421642 100644
--- a/src/lib/math/log.go
+++ b/src/lib/math/log.go
@@ -85,16 +85,16 @@ func Log(x float64) float64 {
// special cases
switch {
- case sys.IsNaN(x) || sys.IsInf(x, 1):
+ case IsNaN(x) || IsInf(x, 1):
return x;
case x < 0:
- return sys.NaN();
+ return NaN();
case x == 0:
- return sys.Inf(-1);
+ return Inf(-1);
}
// reduce
- f1, ki := sys.Frexp(x);
+ f1, ki := Frexp(x);
if f1 < Sqrt2/2 {
f1 *= 2;
ki--;
@@ -115,7 +115,7 @@ func Log(x float64) float64 {
func Log10(arg float64) float64 {
if arg <= 0 {
- return sys.NaN();
+ return NaN();
}
return Log(arg) * (1/Ln10);
}
diff --git a/src/lib/math/pow.go b/src/lib/math/pow.go
index 3ab218d5e..929943a13 100644
--- a/src/lib/math/pow.go
+++ b/src/lib/math/pow.go
@@ -17,7 +17,7 @@ func Pow(x, y float64) float64 {
case x == 0 && y > 0:
return 0;
case x == 0 && y < 0:
- return sys.Inf(1);
+ return Inf(1);
case y == 0.5:
return Sqrt(x);
case y == -0.5:
@@ -30,9 +30,9 @@ func Pow(x, y float64) float64 {
absy = -absy;
flip = true;
}
- yi, yf := sys.Modf(absy);
+ yi, yf := Modf(absy);
if yf != 0 && x < 0 {
- return sys.NaN();
+ return NaN();
}
if yi >= 1<<63 {
return Exp(y * Log(x));
@@ -55,7 +55,7 @@ func Pow(x, y float64) float64 {
// by multiplying in successive squarings
// of x according to bits of yi.
// accumulate powers of two into exp.
- x1, xe := sys.Frexp(x);
+ x1, xe := Frexp(x);
for i := int64(yi); i != 0; i >>= 1 {
if i&1 == 1 {
a1 *= x1;
@@ -76,5 +76,5 @@ func Pow(x, y float64) float64 {
a1 = 1 / a1;
ae = -ae;
}
- return sys.Ldexp(a1, ae);
+ return Ldexp(a1, ae);
}
diff --git a/src/lib/math/sin.go b/src/lib/math/sin.go
index fc8a05d4b..9c7b39bf8 100644
--- a/src/lib/math/sin.go
+++ b/src/lib/math/sin.go
@@ -29,9 +29,9 @@ func sinus(arg float64, quad int) float64 {
var y float64;
if x > 32764 {
var e float64;
- e, y = sys.Modf(x);
+ e, y = Modf(x);
e = e + float64(quad);
- temp1, f := sys.Modf(0.25*e);
+ temp1, f := Modf(0.25*e);
quad = int(e - 4*f);
} else {
k := int32(x);
diff --git a/src/lib/math/sqrt.go b/src/lib/math/sqrt.go
index cf256b25c..466b92771 100644
--- a/src/lib/math/sqrt.go
+++ b/src/lib/math/sqrt.go
@@ -4,6 +4,8 @@
package math
+import "math"
+
/*
* sqrt returns the square root of its floating
* point argument. Newton's method.
@@ -12,18 +14,18 @@ package math
*/
func Sqrt(arg float64) float64 {
- if sys.IsInf(arg, 1) {
+ if IsInf(arg, 1) {
return arg;
}
if arg <= 0 {
if arg < 0 {
- return sys.NaN();
+ return NaN();
}
return 0;
}
- x,exp := sys.Frexp(arg);
+ x,exp := Frexp(arg);
for x < 0.5 {
x = x*2;
exp = exp-1;
diff --git a/src/lib/math/tan.go b/src/lib/math/tan.go
index 4910fa3a4..99155d005 100644
--- a/src/lib/math/tan.go
+++ b/src/lib/math/tan.go
@@ -33,7 +33,7 @@ func Tan(arg float64) float64 {
}
x = x * (4/Pi); /* overflow? */
var e float64;
- e, x = sys.Modf(x);
+ e, x = Modf(x);
i := int32(e);
switch i & 3 {
@@ -56,7 +56,7 @@ func Tan(arg float64) float64 {
if flag {
if(temp == 0) {
- panic(sys.NaN());
+ panic(NaN());
}
temp = 1/temp;
}