home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / astro-src-2.1.0beta.tar.gz / astro-src-2.1.0beta.tar / astro-src-2.1.0beta / source / MathLib.c < prev    next >
C/C++ Source or Header  |  2000-09-26  |  7KB  |  329 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. #include "MathLib.h"
  44.  
  45. // Library reference returned by SysLibFind() or SysLibLoad()
  46. UInt16 MathLibRef;
  47.  
  48.  
  49.  
  50. double acos(double x) {
  51.     double result;
  52.     MathLibACos(MathLibRef, x, &result);
  53.     return result;
  54. }
  55.  
  56. double asin(double x) {
  57.     double result;
  58.     MathLibASin(MathLibRef, x, &result);
  59.     return result;
  60. }
  61.  
  62. double atan(double x) {
  63.     double result;
  64.     MathLibATan(MathLibRef, x, &result);
  65.     return result;
  66. }
  67.  
  68. double atan2(double y, double x) {
  69.     double result;
  70.     MathLibATan2(MathLibRef, y, x, &result);
  71.     return result;
  72. }
  73.  
  74. double cos(double x) {
  75.     double result;
  76.     MathLibCos(MathLibRef, x, &result);
  77.     return result;
  78. }
  79.  
  80. double sin(double x) {
  81.     double result;
  82.     MathLibSin(MathLibRef, x, &result);
  83.     return result;
  84. }
  85.  
  86. double tan(double x) {
  87.     double result;
  88.     MathLibTan(MathLibRef, x, &result);
  89.     return result;
  90. }
  91.  
  92. void sincos(double x, double *sinx, double *cosx) {
  93.     MathLibSinCos(MathLibRef, x, sinx, cosx);
  94. }
  95.  
  96. double cosh(double x) {
  97.     double result;
  98.     MathLibCosH(MathLibRef, x, &result);
  99.     return result;
  100. }
  101.  
  102. double sinh(double x) {
  103.     double result;
  104.     MathLibSinH(MathLibRef, x, &result);
  105.     return result;
  106. }
  107.  
  108. double tanh(double x) {
  109.     double result;
  110.     MathLibTanH(MathLibRef, x, &result);
  111.     return result;
  112. }
  113.  
  114. double acosh(double x) {
  115.     double result;
  116.     MathLibACosH(MathLibRef, x, &result);
  117.     return result;
  118. }
  119.  
  120. double asinh(double x) {
  121.     double result;
  122.     MathLibASinH(MathLibRef, x, &result);
  123.     return result;
  124. }
  125.  
  126. double atanh(double x) {
  127.     double result;
  128.     MathLibATanH(MathLibRef, x, &result);
  129.     return result;
  130. }
  131.  
  132. double exp(double x) {
  133.     double result;
  134.     MathLibExp(MathLibRef, x, &result);
  135.     return result;
  136. }
  137.  
  138. double frexp(double x, Int16 *exponent) {
  139.     double fraction;
  140.     MathLibFrExp(MathLibRef, x, &fraction, exponent);
  141.     return fraction;
  142. }
  143.  
  144. double ldexp(double x, Int16 exponent) {
  145.     double result;
  146.     MathLibLdExp(MathLibRef, x, exponent, &result);
  147.     return result;
  148. }
  149.  
  150. double log(double x) {
  151.     double result;
  152.     MathLibLog(MathLibRef, x, &result);
  153.     return result;
  154. }
  155.  
  156. double log10(double x) {
  157.     double result;
  158.     MathLibLog10(MathLibRef, x, &result);
  159.     return result;
  160. }
  161.  
  162. double modf(double x, double *intpart) {
  163.     double fraction;
  164.     MathLibModF(MathLibRef, x, intpart, &fraction);
  165.     return fraction;
  166. }
  167.  
  168. double expm1(double x) {
  169.     double result;
  170.     MathLibExpM1(MathLibRef, x, &result);
  171.     return result;
  172. }
  173.  
  174. double log1p(double x) {
  175.     double result;
  176.     MathLibLog1P(MathLibRef, x, &result);
  177.     return result;
  178. }
  179.  
  180. double logb(double x) {
  181.     double result;
  182.     MathLibLogB(MathLibRef, x, &result);
  183.     return result;
  184. }
  185.  
  186. double log2(double x) {
  187.     double result;
  188.     MathLibLog2(MathLibRef, x, &result);
  189.     return result;
  190. }
  191.  
  192. double pow(double x, double y) {
  193.     double result;
  194.     MathLibPow(MathLibRef, x, y, &result);
  195.     return result;
  196. }
  197.  
  198. double sqrt(double x) {
  199.     double result;
  200.     MathLibSqrt(MathLibRef, x, &result);
  201.     return result;
  202. }
  203.  
  204. double hypot(double x, double y) {
  205.     double result;
  206.     MathLibHypot(MathLibRef, x, y, &result);
  207.     return result;
  208. }
  209.  
  210. double cbrt(double x) {
  211.     double result;
  212.     MathLibCbrt(MathLibRef, x, &result);
  213.     return result;
  214. }
  215.  
  216. double ceil(double x) {
  217.     double result;
  218.     MathLibCeil(MathLibRef, x, &result);
  219.     return result;
  220. }
  221.  
  222. double fabs(double x) {
  223.     double result;
  224.     MathLibFAbs(MathLibRef, x, &result);
  225.     return result;
  226. }
  227.  
  228. double floor(double x) {
  229.     double result;
  230.     MathLibFloor(MathLibRef, x, &result);
  231.     return result;
  232. }
  233.  
  234. double fmod(double x, double y) {
  235.     double result;
  236.     MathLibFMod(MathLibRef, x, y, &result);
  237.     return result;
  238. }
  239.  
  240. Int16 isinf(double x) {
  241.     Int16 result;
  242.     MathLibIsInf(MathLibRef, x, &result);
  243.     return result;
  244. }
  245.  
  246. Int16 finite(double x) {
  247.     Int16 result;
  248.     MathLibFinite(MathLibRef, x, &result);
  249.     return result;
  250. }
  251.  
  252. double scalbn(double x, Int16 exponent) {
  253.     double result;
  254.     MathLibScalBN(MathLibRef, x, exponent, &result);
  255.     return result;
  256. }
  257.  
  258. double drem(double x, double y) {
  259.     double result;
  260.     MathLibDRem(MathLibRef, x, y, &result);
  261.     return result;
  262. }
  263.  
  264. double significand(double x) {
  265.     double result;
  266.     MathLibSignificand(MathLibRef, x, &result);
  267.     return result;
  268. }
  269.  
  270. double copysign(double x, double y) {
  271.     double result;
  272.     MathLibCopySign(MathLibRef, x, y, &result);
  273.     return result;
  274. }
  275.  
  276. Int16 isnan(double x) {
  277.     Int16 result;
  278.     MathLibIsNaN(MathLibRef, x, &result);
  279.     return result;
  280. }
  281.  
  282. Int16 ilogb(double x) {
  283.     Int16 result;
  284.     MathLibILogB(MathLibRef, x, &result);
  285.     return result;
  286. }
  287.  
  288. double rint(double x) {
  289.     double result;
  290.     MathLibRInt(MathLibRef, x, &result);
  291.     return result;
  292. }
  293.  
  294. double nextafter(double x, double y) {
  295.     double result;
  296.     MathLibNextAfter(MathLibRef, x, y, &result);
  297.     return result;
  298. }
  299.  
  300. double remainder(double x, double y) {
  301.     double result;
  302.     MathLibRemainder(MathLibRef, x, y, &result);
  303.     return result;
  304. }
  305.  
  306. double scalb(double x, double exponent) {
  307.     double result;
  308.     MathLibScalB(MathLibRef, x, exponent, &result);
  309.     return result;
  310. }
  311.  
  312. double round(double x) {
  313.     double result;
  314.     MathLibRound(MathLibRef, x, &result);
  315.     return result;
  316. }
  317.  
  318. double trunc(double x) {
  319.     double result;
  320.     MathLibTrunc(MathLibRef, x, &result);
  321.     return result;
  322. }
  323.  
  324. UInt32 signbit(double x) {
  325.     UInt32 result;
  326.     MathLibSignBit(MathLibRef, x, &result);
  327.     return result;
  328. }
  329.