Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /* Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.
  2.  *
  3.  * Permission to use, copy, modify, and distribute this software
  4.  * is freely granted, provided that this notice is preserved.
  5.  */
  6. /*
  7. FUNCTION
  8. <<fdim>>, <<fdimf>>--positive difference
  9. INDEX
  10.         fdim
  11. INDEX
  12.         fdimf
  13.  
  14. ANSI_SYNOPSIS
  15.         #include <math.h>
  16.         double fdim(double <[x]>, double <[y]>);
  17.         float fdimf(float <[x]>, float <[y]>);
  18.  
  19. DESCRIPTION
  20. The <<fdim>> functions determine the positive difference between their
  21. arguments, returning:
  22. .       <[x]> - <[y]>   if <[x]> > <[y]>, or
  23.         @ifnottex
  24. .       +0      if <[x]> <= <[y]>, or
  25.         @end ifnottex
  26.         @tex
  27. .       +0      if <[x]> $\leq$ <[y]>, or
  28.         @end tex
  29. .       NAN     if either argument is NAN.
  30. A range error may occur.
  31.  
  32. RETURNS
  33. The <<fdim>> functions return the positive difference value.
  34.  
  35. PORTABILITY
  36. ANSI C, POSIX.
  37.  
  38. */
  39.  
  40. #include "fdlibm.h"
  41.  
  42. #ifndef _DOUBLE_IS_32BITS
  43.  
  44. #ifdef __STDC__
  45.         double fdim(double x, double y)
  46. #else
  47.         double fdim(x,y)
  48.         double x;
  49.         double y;
  50. #endif
  51. {
  52.   int c = __fpclassifyd(x);
  53.   if (c == FP_NAN)  return(x);
  54.   if (__fpclassifyd(y) == FP_NAN)  return(y);
  55.   if (c == FP_INFINITE)
  56.     return HUGE_VAL;
  57.  
  58.   return x > y ? x - y : 0.0;
  59. }
  60.  
  61. #endif /* _DOUBLE_IS_32BITS */
  62.