1 | */* Return positive difference between arguments.* |

2 | * Copyright (C) 1997, 2004, 2009 Free Software Foundation, Inc.* |

3 | * This file is part of the GNU C Library.* |

4 | * Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.* |

5 | |

6 | * The GNU C Library is free software; you can redistribute it and/or* |

7 | * modify it under the terms of the GNU Lesser General Public* |

8 | * License as published by the Free Software Foundation; either* |

9 | * version 2.1 of the License, or (at your option) any later version.* |

10 | |

11 | * The GNU C Library is distributed in the hope that it will be useful,* |

12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of* |

13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* |

14 | * Lesser General Public License for more details.* |

15 | |

16 | * You should have received a copy of the GNU Lesser General Public* |

17 | * License along with the GNU C Library; if not, write to the Free* |

18 | * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA* |

19 | * 02111-1307 USA. */* |

20 | |

21 | __#include <errno.h>__ |

22 | __#include "quadmath-imp.h"__ |

23 | |

24 | **__float128** |

25 | fdimq (**__float128** x, **__float128** y) |

26 | { |

27 | *int* clsx = fpclassifyq (x); |

28 | *int* clsy = fpclassifyq (y); |

29 | |

30 | **if** (clsx == QUADFP_NAN || clsy == QUADFP_NAN |

31 | || (y < `0` && clsx == QUADFP_INFINITE && clsy == QUADFP_INFINITE)) |

32 | */* Raise invalid flag. */* |

33 | **return** x - y; |

34 | |

35 | **if** (x <= y) |

36 | **return** `0.0Q`; |

37 | |

38 | **__float128** r = x - y; |

39 | **if** (isinfq (r)) |

40 | errno = ERANGE; |

41 | |

42 | **return** r; |

43 | } |

44 | |