[C language library function source code]
[This program is compiled in Dev C ++ 4.9.9.2]
/*
Calculate the remainder of x/y. Returns X-N * y, with the same symbol as Y.
N = [x/y] (rounded to the left zero)
*/
Double my_fmod01 (Double X, Double Y)
{
Register double ret;
_ ASM __(
"1: fprem/n/t"
"Fstsw % ax/n/t"
"Sahf/n/t"
"JP 1B"
: "= T" (RET)
: "0" (x), "U" (y)
: "Ax", "cc"
);
Return ret;
}
Double my_fmod02 (Double X, Double Y)
{
Double temp, RET;
If (y = 0.0)
Return 0.0;
Temp = floor (x/y );
Ret = x-Temp * Y;
If (x <0.0 )! = (Y <0.0 ))
Ret = ret-y;
Return ret;
}
Int main ()
{
Double X, Y;
X = 80.8, y = 3.0;
Printf ("fmod (% F, % F) = % F/N", X, Y, fmod (x, y ));
Printf ("my_fmod01 (% F, % F) = % F/N", X, Y, my_fmod01 (x, y ));
Printf ("my_fmod02 (% F, % F) = % F/N", X, Y, my_fmod01 (x, y ));
Printf ("/n *********************************** * ******/N ");
X =-55.968, y = 8.8;
Printf ("fmod (% F, % F) = % F/N", X, Y, fmod (x, y ));
Printf ("my_fmod01 (% F, % F) = % F/N", X, Y, my_fmod01 (x, y ));
Printf ("my_fmod02 (% F, % F) = % F/N", X, Y, my_fmod01 (x, y ));
System ("pause ");
Return 0;
}