OSDN Git Service

2004-07-09 Bryce McKinlay <mckinlay@redhat.com>
[pf3gnuchains/gcc-fork.git] / libjava / java / lang / natMath.cc
1 /* Copyright (C) 1998, 1999, 2000, 2002  Free Software Foundation
2
3    This file is part of libgcj.
4
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8  
9 /**
10  * @author Andrew Haley <aph@cygnus.com>
11  * @date Tue Sep 22 1998 */
12 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
13  * "The Java Language Specification", ISBN 0-201-63451-1
14  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
15  * Status:  Believed complete and correct.
16  */
17  
18 #include <config.h>
19
20 #include <java/lang/String.h>
21 #include <java/lang/Float.h>
22 #include <java/lang/Double.h>
23 #include <java/lang/Integer.h>
24 #include <java/lang/Long.h>
25 #include <java/lang/Math.h>
26 #include <gcj/array.h>
27
28 #include "fdlibm.h"
29
30 jdouble java::lang::Math::cos(jdouble x)
31 {
32   return (jdouble)::cos((double)x);
33 }  
34
35 jdouble java::lang::Math::sin(jdouble x)
36 {
37   return (jdouble)::sin((double)x);
38 }  
39
40 jdouble java::lang::Math::tan(jdouble x)
41 {
42   return (jdouble)::tan((double)x);
43 }  
44
45 jdouble java::lang::Math::asin(jdouble x)
46 {
47   return (jdouble)::asin((double)x);
48 }  
49
50 jdouble java::lang::Math::acos(jdouble x)
51 {
52   return (jdouble)::acos((double)x);
53 }  
54
55 jdouble java::lang::Math::atan(jdouble x)
56 {
57   return (jdouble)::atan((double)x);
58 }  
59
60 jdouble java::lang::Math::atan2(jdouble y, jdouble x)
61 {
62   return (jdouble)::atan2((double)y, (double)x);
63 }  
64
65 jdouble java::lang::Math::log(jdouble x)
66 {
67   return (jdouble)::log((double)x);
68 }  
69
70 jdouble java::lang::Math::exp(jdouble x)
71 {
72   return (jdouble)::exp((double)x);
73 }  
74
75 jdouble java::lang::Math::sqrt(jdouble x)
76 {
77   return (jdouble)::sqrt((double)x);
78 }  
79
80 jdouble java::lang::Math::pow(jdouble y, jdouble x)
81 {
82   return (jdouble)::pow((double)y, (double)x);
83 }  
84
85 jdouble java::lang::Math::IEEEremainder(jdouble y, jdouble x)
86 {
87   return (jdouble)::__ieee754_remainder((double)y, (double)x);
88 }  
89
90 jdouble java::lang::Math::rint(jdouble x)
91 {
92   return (jdouble)::rint((double)x);
93 }  
94
95 jdouble java::lang::Math::floor(jdouble x)
96 {
97   return (jdouble)::floor((double)x);
98 }  
99
100 jdouble java::lang::Math::ceil(jdouble x)
101 {
102   return (jdouble)::ceil((double)x);
103 }  
104
105 static inline int
106 floatToIntBits (jfloat value)
107 {
108   union {
109     jint l;
110     jfloat d;
111   } u;
112   u.d = value;
113   return u.l;
114 }
115
116 static inline bool
117 isNaN (jint bits)
118 {
119   jint e = bits & 0x7f800000;
120   jint f = bits & 0x007fffff;
121
122   return e == 0x7f800000 && f != 0;
123 }
124
125 static inline jlong
126 doubleToLongBits (jdouble value)
127 {
128   union {
129     jlong l;
130     jdouble d;
131   } u;
132   u.d = value;
133   return u.l;
134 }
135
136 static inline bool 
137 isNaN (jlong bits)
138 {
139   jlong e = bits & 0x7ff0000000000000LL;
140   jlong f = bits & 0x000fffffffffffffLL;
141   
142   return e == 0x7ff0000000000000LL && f != 0LL;
143 }
144