home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / hobby / palmoon / palmoon.EXE / MathLib.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-07-13  |  7.1 KB  |  330 lines

  1. /* MathLib: Pilot shared library of IEEE-754 double math functions
  2.  *
  3.  * Convenience functions for the calling application.  These functions
  4.  * provide a programmer-friendly wrapper around the raw system trap
  5.  * invocations which actually call the library routines.  The idea
  6.  * is to allow the programmer to say:
  7.  *    y = sqrt(x);
  8.  * instead of requiring:
  9.  *       MathLibSqrt(MathLibRef, x, &y);
  10.  * like the system trap interface requires.  The system trap form is
  11.  * not only harder to read, but can't directly replace the traditional
  12.  * function call in ported code, and can't be nested inside an expression.
  13.  * Just add this source file to your project or makefile, and include
  14.  * "MathLib.h" in any source file that needs to call these.
  15.  *
  16.  * The downside to these routines is that they'll take up some space
  17.  * in your program, though CodeWarrior at least is smart enough to
  18.  * only link in the ones which you actually use, so it doesn't really
  19.  * cost you that much.  In fact, if you call these enough they'll pay
  20.  * for themselves, since "x=sqrt(x)" generates much less code than
  21.  * calling MathLibSqrt() directly.
  22.  *
  23.  * Copyright (C) 1997 Rick Huebner
  24.  *
  25.  * This program is free software; you can redistribute it and/or modify
  26.  * it under the terms of the GNU Library General Public License as
  27.  * published by the Free Software Foundation; either version 2 of the
  28.  * License, or (at your option) any later version.
  29.  *
  30.  * This program is distributed in the hope that it will be useful,
  31.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  32.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  33.  * GNU Library General Public License for more details.
  34.  *
  35.  * You should have received a copy of the GNU Library General Public License
  36.  * along with this program; see file COPYING.LIB.  If not, write to the
  37.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  38.  * Boston, MA 02111-1307, USA
  39.  *
  40.  * Version 1.01, 23 August 1997, Rick Huebner
  41.  */
  42. #include <PalmOS.h>
  43.  
  44. #include "MathLib.h"
  45.  
  46. // Library reference returned by SysLibFind() or SysLibLoad()
  47. UInt16 MathLibRef;
  48.  
  49.  
  50.  
  51. double acos(double x) {
  52.     double result;
  53.     MathLibACos(MathLibRef, x, &result);
  54.     return result;
  55. }
  56.  
  57. double asin(double x) {
  58.     double result;
  59.     MathLibASin(MathLibRef, x, &result);
  60.     return result;
  61. }
  62.  
  63. double atan(double x) {
  64.     double result;
  65.     MathLibATan(MathLibRef, x, &result);
  66.     return result;
  67. }
  68.  
  69. double atan2(double y, double x) {
  70.     double result;
  71.     MathLibATan2(MathLibRef, y, x, &result);
  72.     return result;
  73. }
  74.  
  75. double cos(double x) {
  76.     double result;
  77.     MathLibCos(MathLibRef, x, &result);
  78.     return result;
  79. }
  80.  
  81. double sin(double x) {
  82.     double result;
  83.     MathLibSin(MathLibRef, x, &result);
  84.     return result;
  85. }
  86.  
  87. double tan(double x) {
  88.     double result;
  89.     MathLibTan(MathLibRef, x, &result);
  90.     return result;
  91. }
  92.  
  93. void sincos(double x, double *sinx, double *cosx) {
  94.     MathLibSinCos(MathLibRef, x, sinx, cosx);
  95. }
  96.  
  97. double cosh(double x) {
  98.     double result;
  99.     MathLibCosH(MathLibRef, x, &result);
  100.     return result;
  101. }
  102.  
  103. double sinh(double x) {
  104.     double result;
  105.     MathLibSinH(MathLibRef, x, &result);
  106.     return result;
  107. }
  108.  
  109. double tanh(double x) {
  110.     double result;
  111.     MathLibTanH(MathLibRef, x, &result);
  112.     return result;
  113. }
  114.  
  115. double acosh(double x) {
  116.     double result;
  117.     MathLibACosH(MathLibRef, x, &result);
  118.     return result;
  119. }
  120.  
  121. double asinh(double x) {
  122.     double result;
  123.     MathLibASinH(MathLibRef, x, &result);
  124.     return result;
  125. }
  126.  
  127. double atanh(double x) {
  128.     double result;
  129.     MathLibATanH(MathLibRef, x, &result);
  130.     return result;
  131. }
  132.  
  133. double exp(double x) {
  134.     double result;
  135.     MathLibExp(MathLibRef, x, &result);
  136.     return result;
  137. }
  138.  
  139. double frexp(double x, Int16 *exponent) {
  140.     double fraction;
  141.     MathLibFrExp(MathLibRef, x, &fraction, exponent);
  142.     return fraction;
  143. }
  144.  
  145. double ldexp(double x, Int16 exponent) {
  146.     double result;
  147.     MathLibLdExp(MathLibRef, x, exponent, &result);
  148.     return result;
  149. }
  150.  
  151. double log(double x) {
  152.     double result;
  153.     MathLibLog(MathLibRef, x, &result);
  154.     return result;
  155. }
  156.  
  157. double log10(double x) {
  158.     double result;
  159.     MathLibLog10(MathLibRef, x, &result);
  160.     return result;
  161. }
  162.  
  163. double modf(double x, double *intpart) {
  164.     double fraction;
  165.     MathLibModF(MathLibRef, x, intpart, &fraction);
  166.     return fraction;
  167. }
  168.  
  169. double expm1(double x) {
  170.     double result;
  171.     MathLibExpM1(MathLibRef, x, &result);
  172.     return result;
  173. }
  174.  
  175. double log1p(double x) {
  176.     double result;
  177.     MathLibLog1P(MathLibRef, x, &result);
  178.     return result;
  179. }
  180.  
  181. double logb(double x) {
  182.     double result;
  183.     MathLibLogB(MathLibRef, x, &result);
  184.     return result;
  185. }
  186.  
  187. double log2(double x) {
  188.     double result;
  189.     MathLibLog2(MathLibRef, x, &result);
  190.     return result;
  191. }
  192.  
  193. double pow(double x, double y) {
  194.     double result;
  195.     MathLibPow(MathLibRef, x, y, &result);
  196.     return result;
  197. }
  198.  
  199. double sqrt(double x) {
  200.     double result;
  201.     MathLibSqrt(MathLibRef, x, &result);
  202.     return result;
  203. }
  204.  
  205. double hypot(double x, double y) {
  206.     double result;
  207.     MathLibHypot(MathLibRef, x, y, &result);
  208.     return result;
  209. }
  210.  
  211. double cbrt(double x) {
  212.     double result;
  213.     MathLibCbrt(MathLibRef, x, &result);
  214.     return result;
  215. }
  216.  
  217. double ceil(double x) {
  218.     double result;
  219.     MathLibCeil(MathLibRef, x, &result);
  220.     return result;
  221. }
  222.  
  223. double fabs(double x) {
  224.     double result;
  225.     MathLibFAbs(MathLibRef, x, &result);
  226.     return result;
  227. }
  228.  
  229. double floor(double x) {
  230.     double result;
  231.     MathLibFloor(MathLibRef, x, &result);
  232.     return result;
  233. }
  234.  
  235. double fmod(double x, double y) {
  236.     double result;
  237.     MathLibFMod(MathLibRef, x, y, &result);
  238.     return result;
  239. }
  240.  
  241. Int16 isinf(double x) {
  242.     Int16 result;
  243.     MathLibIsInf(MathLibRef, x, &result);
  244.     return result;
  245. }
  246.  
  247. Int16 finite(double x) {
  248.     Int16 result;
  249.     MathLibFinite(MathLibRef, x, &result);
  250.     return result;
  251. }
  252.  
  253. double scalbn(double x, Int16 exponent) {
  254.     double result;
  255.     MathLibScalBN(MathLibRef, x, exponent, &result);
  256.     return result;
  257. }
  258.  
  259. double drem(double x, double y) {
  260.     double result;
  261.     MathLibDRem(MathLibRef, x, y, &result);
  262.     return result;
  263. }
  264.  
  265. double significand(double x) {
  266.     double result;
  267.     MathLibSignificand(MathLibRef, x, &result);
  268.     return result;
  269. }
  270.  
  271. double copysign(double x, double y) {
  272.     double result;
  273.     MathLibCopySign(MathLibRef, x, y, &result);
  274.     return result;
  275. }
  276.  
  277. Int16 isnan(double x) {
  278.     Int16 result;
  279.     MathLibIsNaN(MathLibRef, x, &result);
  280.     return result;
  281. }
  282.  
  283. Int16 ilogb(double x) {
  284.     Int16 result;
  285.     MathLibILogB(MathLibRef, x, &result);
  286.     return result;
  287. }
  288.  
  289. double rint(double x) {
  290.     double result;
  291.     MathLibRInt(MathLibRef, x, &result);
  292.     return result;
  293. }
  294.  
  295. double nextafter(double x, double y) {
  296.     double result;
  297.     MathLibNextAfter(MathLibRef, x, y, &result);
  298.     return result;
  299. }
  300.  
  301. double remainder(double x, double y) {
  302.     double result;
  303.     MathLibRemainder(MathLibRef, x, y, &result);
  304.     return result;
  305. }
  306.  
  307. double scalb(double x, double exponent) {
  308.     double result;
  309.     MathLibScalB(MathLibRef, x, exponent, &result);
  310.     return result;
  311. }
  312.  
  313. double round(double x) {
  314.     double result;
  315.     MathLibRound(MathLibRef, x, &result);
  316.     return result;
  317. }
  318.  
  319. double trunc(double x) {
  320.     double result;
  321.     MathLibTrunc(MathLibRef, x, &result);
  322.     return result;
  323. }
  324.  
  325. UInt32 signbit(double x) {
  326.     UInt32 result;
  327.     MathLibSignBit(MathLibRef, x, &result);
  328.     return result;
  329. }
  330.