При использовании double fmod(double x, double y)
и y
- целое число, результат оказывается всегда точный.Является ли fmod() точным, когда y является целым числом?
(Это y
целое точное число, но это не значит int
здесь.)
Может быть, C не требуетfmod()
, чтобы обеспечить точные ответы в этих отдельных случаях, но на компиляторы я попытался, то результат является точным, даже если частное значение x/y
не является точно представимым.
- Являются ли точные ответы ожидаемыми, когда
y
является целым числом? - Если нет, укажите пример счетчика.
Примеры:
double x = 1e10;
// x = 10000000000
printf("%.50g\n", fmod(x, 100));
// prints 0
x = 1e60;
// x = 999999999999999949387135297074018866963645011013410073083904
printf("%.50g\n", fmod(x, 100));
// prints 4
x = DBL_MAX;
// x = 179769313486231570...6184124858368
printf("%.50g\n", fmod(x, 100));
// prints 68
x = 123400000000.0/9999;
// x = 12341234.1234123408794403076171875
printf("%.50g %a\n", fmod(x, 100), fmod(x, 100));
// prints 34.1234123408794403076171875 0x1.10fcbf9cp+5
Примечания:
Мои double
появляется в IEEE 754 binary64 требованиям.
Ограничения printf()
здесь не касаются, только fmod()
.
[Редактировать]
Примечание: Под «Ожидаются точные ответы», я спрашиваю, если fmod()
результат и математический результат точно такой же.
Что вы подразумеваете под "точной" здесь? Как в «соответствует математическому результату»? –
Вы правы. Извинения, бит сонный –
@OliCharlesworth Да, «соответствует математическому результату» – chux