/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #include #include double remquo(double x, double y, int *quo) { if (isnan(x)) return x; if (isnan(y)) return y; if (isinf(x) || y == 0) return NAN; double div = x/y; double integral; double frac = modf(div, &integral); int iintegral = (int)integral; if (frac == 0.5) { if (iintegral & 1) *quo = iintegral + 1; else *quo = iintegral; } else if (frac == -0.5) { if (iintegral & 1) *quo = iintegral - 1; else *quo = iintegral; } else *quo = round(div); return x - *quo * y; }