Print this page




  27  * Use is subject to license terms.
  28  */
  29 
  30 #if defined(ELFOBJ)
  31 #pragma weak fdim = __fdim
  32 #endif
  33 
  34 /*
  35  * fdim(x,y) returns x - y if x > y, +0 if x <= y, and NaN if x and
  36  * y are unordered.
  37  *
  38  * fdim(x,y) raises overflow or inexact if x > y and x - y overflows
  39  * or is inexact.  It raises invalid if either operand is a signaling
  40  * NaN.  Otherwise, it raises no exceptions.
  41  */
  42 
  43 #include "libm.h"       /* for islessequal macro */
  44 
  45 double
  46 __fdim(double x, double y) {
  47 #if defined(COMPARISON_MACRO_BUG)
  48         if (x == x && y == y && x <= y) {    /* } */
  49 #else
  50         if (islessequal(x, y)) {
  51 #endif
  52                 x = 0.0;
  53                 y = -x;
  54         }
  55         return (x - y);
  56 }


  27  * Use is subject to license terms.
  28  */
  29 
  30 #if defined(ELFOBJ)
  31 #pragma weak fdim = __fdim
  32 #endif
  33 
  34 /*
  35  * fdim(x,y) returns x - y if x > y, +0 if x <= y, and NaN if x and
  36  * y are unordered.
  37  *
  38  * fdim(x,y) raises overflow or inexact if x > y and x - y overflows
  39  * or is inexact.  It raises invalid if either operand is a signaling
  40  * NaN.  Otherwise, it raises no exceptions.
  41  */
  42 
  43 #include "libm.h"       /* for islessequal macro */
  44 
  45 double
  46 __fdim(double x, double y) {



  47         if (islessequal(x, y)) {

  48                 x = 0.0;
  49                 y = -x;
  50         }
  51         return (x - y);
  52 }