blob: ae13892dc7f7761c922ee4c232acb469b753e6e7 [file] [log] [blame]
The Android Open Source Projectadc854b2009-03-03 19:28:47 -08001/*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Native functions for java.lang.Math.
5 */
6#include "jni.h"
7#include "JNIHelp.h"
8
9#include <stdlib.h>
10#include <math.h>
11
12/* native public static double sin(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070013static jdouble jsin(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080014{
15 return sin(a);
16}
17
18/* native public static double cos(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070019static jdouble jcos(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080020{
21 return cos(a);
22}
23
24/* native public static double tan(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070025static jdouble jtan(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080026{
27 return tan(a);
28}
29
30/* native public static double asin(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070031static jdouble jasin(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080032{
33 return asin(a);
34}
35
36/* native public static double acos(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070037static jdouble jacos(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080038{
39 return acos(a);
40}
41
42/* native public static double atan(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070043static jdouble jatan(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080044{
45 return atan(a);
46}
47
48/* native public static double exp(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070049static jdouble jexp(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080050{
51 return exp(a);
52}
53
54/* native public static double log(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070055static jdouble jlog(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080056{
57 return log(a);
58}
59
60/* native public static double sqrt(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070061static jdouble jsqrt(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080062{
63 return sqrt(a);
64}
65
66/* native public static double IEEEremainder(double a, double b); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070067static jdouble jieee_remainder(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a, jdouble b)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080068{
69 return remainder(a, b);
70}
71
72/* native public static double floor(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070073static jdouble jfloor(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080074{
75 return floor(a);
76}
77
78/* native public static double ceil(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070079static jdouble jceil(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080080{
81 return ceil(a);
82}
83
84/* native public static double rint(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070085static jdouble jrint(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080086{
87 return rint(a);
88}
89
90/* native public static double atan2(double a, double b); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070091static jdouble jatan2(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a, jdouble b)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080092{
93 return atan2(a, b);
94}
95
96/* native public static double pow(double a, double b); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -070097static jdouble jpow(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a, jdouble b)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080098{
99 return pow(a, b);
100}
101
102/* native public static double sinh(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700103static jdouble jsinh(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800104{
105 return sinh(a);
106}
107
108/* native public static double tanh(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700109static jdouble jtanh(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800110{
111 return tanh(a);
112}
113
114/* native public static double cosh(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700115static jdouble jcosh(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800116{
117 return cosh(a);
118}
119
120/* native public static double log10(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700121static jdouble jlog10(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800122{
123 return log10(a);
124}
125
126/* native public static double cbrt(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700127static jdouble jcbrt(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800128{
129 return cbrt(a);
130}
131
132/* native public static double expm1(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700133static jdouble jexpm1(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800134{
135 return expm1(a);
136}
137
138/* native public static double hypot(double a, double b); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700139static jdouble jhypot(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a, jdouble b)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800140{
141 return hypot(a, b);
142}
143
144/* native public static double log1p(double a); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700145static jdouble jlog1p(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800146{
147 return log1p(a);
148}
149
150/* native public static double nextafter(double a, double b); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700151static jdouble jnextafter(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a, jdouble b)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800152{
153 return nextafter(a, b);
154}
155
156/* native public static float nextafterf(float a, float b); */
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700157static jfloat jnextafterf(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jfloat a, jfloat b)
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800158{
159 return nextafterf(a, b);
160}
161
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700162static jdouble copySign(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jdouble a, jdouble b) {
Elliott Hughesabd91e32010-03-29 15:20:01 -0700163 // Our StrictMath.copySign delegates to Math.copySign, so we need to treat NaN as positive.
164 return copysign(a, isnan(b) ? 1.0 : b);
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700165}
166
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700167static jfloat copySign_f(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused)), jfloat a, jfloat b) {
Elliott Hughesabd91e32010-03-29 15:20:01 -0700168 // Our StrictMath.copySign delegates to Math.copySign, so we need to treat NaN as positive.
169 return copysignf(a, isnan(b) ? 1.0 : b);
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700170}
171
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800172static JNINativeMethod gMethods[] = {
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800173 { "IEEEremainder", "(DD)D", jieee_remainder },
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700174 { "acos", "(D)D", jacos },
175 { "asin", "(D)D", jasin },
176 { "atan", "(D)D", jatan },
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800177 { "atan2", "(DD)D", jatan2 },
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800178 { "cbrt", "(D)D", jcbrt },
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700179 { "ceil", "(D)D", jceil },
180 { "copySign", "(DD)D", copySign },
181 { "copySign", "(FF)F", copySign_f },
182 { "cos", "(D)D", jcos },
183 { "cosh", "(D)D", jcosh },
184 { "exp", "(D)D", jexp },
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800185 { "expm1", "(D)D", jexpm1 },
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700186 { "floor", "(D)D", jfloor },
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800187 { "hypot", "(DD)D", jhypot },
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700188 { "log", "(D)D", jlog },
189 { "log10", "(D)D", jlog10 },
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800190 { "log1p", "(D)D", jlog1p },
191 { "nextafter", "(DD)D", jnextafter },
192 { "nextafterf", "(FF)F", jnextafterf },
Elliott Hughesace7e6f2010-03-26 23:23:38 -0700193 { "pow", "(DD)D", jpow },
194 { "rint", "(D)D", jrint },
195 { "sin", "(D)D", jsin },
196 { "sinh", "(D)D", jsinh },
197 { "sqrt", "(D)D", jsqrt },
198 { "tan", "(D)D", jtan },
199 { "tanh", "(D)D", jtanh },
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800200};
201
Elliott Hughesc08f9fb2010-04-16 17:44:12 -0700202int register_java_lang_Math(JNIEnv* env) {
203 return jniRegisterNativeMethods(env, "java/lang/Math", gMethods, NELEM(gMethods));
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800204}