diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-02-08 18:42:39 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-02-08 18:42:39 -0500 |
commit | 7ef8a7379f7f7d09e71ccae2a0b688c3cd80423f (patch) | |
tree | 092ab0aed1769117fd7b28b8592f6f96b0e0d5af /src/math/fmod.c | |
parent | 6acf19370e8adff79cd83b257d3f04aeaf2a59dd (diff) |
merge sources into single tree
Diffstat (limited to 'src/math/fmod.c')
-rw-r--r-- | src/math/fmod.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/math/fmod.c b/src/math/fmod.c new file mode 100644 index 00000000..98091880 --- /dev/null +++ b/src/math/fmod.c @@ -0,0 +1,35 @@ +# define TGSOURCE "fmod.c" +#include <math.h> +#include "nonstd/tgmath.h" +#include "errno.h" + +/** floating-point remainder **/ +TYPE TGFN(fmod)(TYPE x, TYPE y) +{ + if (y == 0) { + return 0; + } + + if (0) { + errno = ERANGE; /* The result cannot be represented */ + /* RETURN_FAILURE(CONSTANT(HUGE_VAL), A range error occurred); */ + return TGHUGE; + } + + /* RETURN_SUCCESS(ARGUMENT(x) - VAR(i) * ARGUMENT(y)); */ + return x - x / y; +} + +/*** +compute the floating-point remainder of ARGUMENT(x)/ARGUMENT(y). +FIXME: I am not sure I understand this. +***/ + +/* +IMPLEMENTATION(The value returned on a domain error, CONSTANT(HUGE_VAL)) +IMPLEMENTATION(Whether ARGUMENT(y) being LITERAL(0) results in a domain error or THIS() returning LITERAL(0)) +LINK(m) +*/ +/* +STDC(1) +*/ |