GPS4Palm

Source Code Documentation


MathLib.c

Go to the documentation of this file.
00001 /* MathLib: Pilot shared library of IEEE-754 double math functions
00002  *
00003  * Convenience functions for the calling application.  These functions
00004  * provide a programmer-friendly wrapper around the raw system trap
00005  * invocations which actually call the library routines.  The idea
00006  * is to allow the programmer to say:
00007  *    y = sqrt(x);
00008  * instead of requiring:
00009  *         MathLibSqrt(MathLibRef, x, &y);
00010  * like the system trap interface requires.  The system trap form is
00011  * not only harder to read, but can't directly replace the traditional
00012  * function call in ported code, and can't be nested inside an expression.
00013  * Just add this source file to your project or makefile, and include
00014  * "MathLib.h" in any source file that needs to call these.
00015  *
00016  * The downside to these routines is that they'll take up some space
00017  * in your program, though CodeWarrior at least is smart enough to
00018  * only link in the ones which you actually use, so it doesn't really
00019  * cost you that much.  In fact, if you call these enough they'll pay
00020  * for themselves, since "x=sqrt(x)" generates much less code than
00021  * calling MathLibSqrt() directly.
00022  *
00023  * Copyright (C) 1997 Rick Huebner
00024  *
00025  * This program is free software; you can redistribute it and/or modify
00026  * it under the terms of the GNU Library General Public License as
00027  * published by the Free Software Foundation; either version 2 of the
00028  * License, or (at your option) any later version.
00029  *
00030  * This program is distributed in the hope that it will be useful,
00031  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00032  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00033  * GNU Library General Public License for more details.
00034  *
00035  * You should have received a copy of the GNU Library General Public License
00036  * along with this program; see file COPYING.LIB.  If not, write to the
00037  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00038  * Boston, MA 02111-1307, USA
00039  *
00040  * Version 1.01, 23 August 1997, Rick Huebner
00041  */
00042 #include <PalmOS.h>
00043 #include <PalmCompatibility.h>
00044 #include "MathLib.h"
00045 
00046 // Library reference returned by SysLibFind() or SysLibLoad()
00047 UInt MathLibRef;
00048 
00049 
00050 
00051 double acos(double x) {
00052         double result;
00053         MathLibACos(MathLibRef, x, &result);
00054         return result;
00055 }
00056 
00057 double asin(double x) {
00058         double result;
00059         MathLibASin(MathLibRef, x, &result);
00060         return result;
00061 }
00062 
00063 double atan(double x) {
00064         double result;
00065         MathLibATan(MathLibRef, x, &result);
00066         return result;
00067 }
00068 
00069 double atan2(double y, double x) {
00070         double result;
00071         MathLibATan2(MathLibRef, y, x, &result);
00072         return result;
00073 }
00074 
00075 double cos(double x) {
00076         double result;
00077         MathLibCos(MathLibRef, x, &result);
00078         return result;
00079 }
00080 
00081 double sin(double x) {
00082         double result;
00083         MathLibSin(MathLibRef, x, &result);
00084         return result;
00085 }
00086 
00087 double tan(double x) {
00088         double result;
00089         MathLibTan(MathLibRef, x, &result);
00090         return result;
00091 }
00092 
00093 void sincos(double x, double *sinx, double *cosx) {
00094         MathLibSinCos(MathLibRef, x, sinx, cosx);
00095 }
00096 
00097 double cosh(double x) {
00098         double result;
00099         MathLibCosH(MathLibRef, x, &result);
00100         return result;
00101 }
00102 
00103 double sinh(double x) {
00104         double result;
00105         MathLibSinH(MathLibRef, x, &result);
00106         return result;
00107 }
00108 
00109 double tanh(double x) {
00110         double result;
00111         MathLibTanH(MathLibRef, x, &result);
00112         return result;
00113 }
00114 
00115 double acosh(double x) {
00116         double result;
00117         MathLibACosH(MathLibRef, x, &result);
00118         return result;
00119 }
00120 
00121 double asinh(double x) {
00122         double result;
00123         MathLibASinH(MathLibRef, x, &result);
00124         return result;
00125 }
00126 
00127 double atanh(double x) {
00128         double result;
00129         MathLibATanH(MathLibRef, x, &result);
00130         return result;
00131 }
00132 
00133 double exp(double x) {
00134         double result;
00135         MathLibExp(MathLibRef, x, &result);
00136         return result;
00137 }
00138 
00139 double frexp(double x, Int *exponent) {
00140         double fraction;
00141         MathLibFrExp(MathLibRef, x, &fraction, exponent);
00142         return fraction;
00143 }
00144 
00145 double ldexp(double x, Int exponent) {
00146         double result;
00147         MathLibLdExp(MathLibRef, x, exponent, &result);
00148         return result;
00149 }
00150 
00151 double log(double x) {
00152         double result;
00153         MathLibLog(MathLibRef, x, &result);
00154         return result;
00155 }
00156 
00157 double log10(double x) {
00158         double result;
00159         MathLibLog10(MathLibRef, x, &result);
00160         return result;
00161 }
00162 
00163 double modf(double x, double *intpart) {
00164         double fraction;
00165         MathLibModF(MathLibRef, x, intpart, &fraction);
00166         return fraction;
00167 }
00168 
00169 double expm1(double x) {
00170         double result;
00171         MathLibExpM1(MathLibRef, x, &result);
00172         return result;
00173 }
00174 
00175 double log1p(double x) {
00176         double result;
00177         MathLibLog1P(MathLibRef, x, &result);
00178         return result;
00179 }
00180 
00181 double logb(double x) {
00182         double result;
00183         MathLibLogB(MathLibRef, x, &result);
00184         return result;
00185 }
00186 
00187 double log2(double x) {
00188         double result;
00189         MathLibLog2(MathLibRef, x, &result);
00190         return result;
00191 }
00192 
00193 double pow(double x, double y) {
00194         double result;
00195         MathLibPow(MathLibRef, x, y, &result);
00196         return result;
00197 }
00198 
00199 double sqrt(double x) {
00200         double result;
00201         MathLibSqrt(MathLibRef, x, &result);
00202         return result;
00203 }
00204 
00205 double hypot(double x, double y) {
00206         double result;
00207         MathLibHypot(MathLibRef, x, y, &result);
00208         return result;
00209 }
00210 
00211 double cbrt(double x) {
00212         double result;
00213         MathLibCbrt(MathLibRef, x, &result);
00214         return result;
00215 }
00216 
00217 double ceil(double x) {
00218         double result;
00219         MathLibCeil(MathLibRef, x, &result);
00220         return result;
00221 }
00222 
00223 double fabs(double x) {
00224         double result;
00225         MathLibFAbs(MathLibRef, x, &result);
00226         return result;
00227 }
00228 
00229 double floor(double x) {
00230         double result;
00231         MathLibFloor(MathLibRef, x, &result);
00232         return result;
00233 }
00234 
00235 double fmod(double x, double y) {
00236         double result;
00237         MathLibFMod(MathLibRef, x, y, &result);
00238         return result;
00239 }
00240 
00241 Int isinf(double x) {
00242         Int result;
00243         MathLibIsInf(MathLibRef, x, &result);
00244         return result;
00245 }
00246 
00247 Int finite(double x) {
00248         Int result;
00249         MathLibFinite(MathLibRef, x, &result);
00250         return result;
00251 }
00252 
00253 double scalbn(double x, Int exponent) {
00254         double result;
00255         MathLibScalBN(MathLibRef, x, exponent, &result);
00256         return result;
00257 }
00258 
00259 double drem(double x, double y) {
00260         double result;
00261         MathLibDRem(MathLibRef, x, y, &result);
00262         return result;
00263 }
00264 
00265 double significand(double x) {
00266         double result;
00267         MathLibSignificand(MathLibRef, x, &result);
00268         return result;
00269 }
00270 
00271 double copysign(double x, double y) {
00272         double result;
00273         MathLibCopySign(MathLibRef, x, y, &result);
00274         return result;
00275 }
00276 
00277 Int isnan(double x) {
00278         Int result;
00279         MathLibIsNaN(MathLibRef, x, &result);
00280         return result;
00281 }
00282 
00283 Int ilogb(double x) {
00284         Int result;
00285         MathLibILogB(MathLibRef, x, &result);
00286         return result;
00287 }
00288 
00289 double rint(double x) {
00290         double result;
00291         MathLibRInt(MathLibRef, x, &result);
00292         return result;
00293 }
00294 
00295 double nextafter(double x, double y) {
00296         double result;
00297         MathLibNextAfter(MathLibRef, x, y, &result);
00298         return result;
00299 }
00300 
00301 double remainder(double x, double y) {
00302         double result;
00303         MathLibRemainder(MathLibRef, x, y, &result);
00304         return result;
00305 }
00306 
00307 double scalb(double x, double exponent) {
00308         double result;
00309         MathLibScalB(MathLibRef, x, exponent, &result);
00310         return result;
00311 }
00312 
00313 double round(double x) {
00314         double result;
00315         MathLibRound(MathLibRef, x, &result);
00316         return result;
00317 }
00318 
00319 double trunc(double x) {
00320         double result;
00321         MathLibTrunc(MathLibRef, x, &result);
00322         return result;
00323 }
00324 
00325 ULong signbit(double x) {
00326         ULong result;
00327         MathLibSignBit(MathLibRef, x, &result);
00328         return result;
00329 }

Created: Mon, 08 Oct 2007 22:33:16 +0200
Copyright ©2004 M. Prinke