blob: d8ec534fd6d5b2da92486ce3cd33026593857e6a [file] [log] [blame]
/**
* 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 <math.h>
#include <errno.h>
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;
}