/* Overridable constants and operations. Copyright (C) 2013 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ typedef double mantissa_t; typedef double mantissa_store_t; #define TWOPOW(i) (0x1.0p##i) #define RADIX TWOPOW (24) /* 2^24 */ #define CUTTER TWOPOW (76) /* 2^76 */ #define RADIXI 0x1.0p-24 /* 2^-24 */ #define TWO52 TWOPOW (52) /* 2^52 */ /* Divide D by RADIX and put the remainder in R. */ #define DIV_RADIX(d,r) \ ({ \ double u = ((d) + CUTTER) - CUTTER; \ if (u > (d)) \ u -= RADIX; \ r = (d) - u; \ (d) = u * RADIXI; \ }) /* Put the integer component of a double X in R and retain the fraction in X. */ #define INTEGER_OF(x, r) \ ({ \ double u = ((x) + TWO52) - TWO52; \ if (u > (x)) \ u -= 1; \ (r) = u; \ (x) -= u; \ }) /* Align IN down to a multiple of F, where F is a power of two. */ #define ALIGN_DOWN_TO(in, f) \ ({ \ double factor = f * TWO52; \ double u = (in + factor) - factor; \ if (u > in) \ u -= f; \ u; \ })