फ्लोटिंग-पॉइंट नंबरों के लिए मॉड्युलो ऑपरेशन % ऑपरेटर से नहीं किया जा सकता (केवल इंटीजर्स के लिए)। <math.h> से remainder, fmod, या fmodl उपयोग करें।
फंक्शन्स तुलना
| फंक्शन | विवरण | राउंडिंग मोड |
|---|---|---|
fmod(x, y) | x - n*y जहां n = trunc(x/y) | शून्य की ओर |
remainder(x, y) | x - n*y जहां n = nearest integer to x/y | निकटतम इंटीजर (ties to even) |
remquo(x, y, *quo) | remainder + लो-बिट्स ऑफ कोशिएंट | निकटतम इंटीजर |
उदाहरण
#include <stdio.h>
#include <math.h>
int main() {
double x = 14.5, y = 4.1;
printf("fmod(%.1f, %.1f) = %.4f\n", x, y, fmod(x, y));
printf("remainder(%.1f, %.1f) = %.4f\n", x, y, remainder(x, y));
x = -34.5; y = 4.0;
printf("fmod(%.1f, %.1f) = %.4f\n", x, y, fmod(x, y));
printf("remainder(%.1f, %.1f) = %.4f\n", x, y, remainder(x, y));
// शून्य से विभाजन
x = 65.23; y = 0;
printf("remainder(%.2f, 0) = %f\n", x, remainder(x, y)); // NaN
return 0;
}
आउटपुट
fmod(14.5, 4.1) = 2.2000 remainder(14.5, 4.1) = -1.9000 fmod(-34.5, 4.0) = -2.5000 remainder(-34.5, 4.0) = 1.5000 remainder(65.23, 0) = -nan
व्याख्या
fmod: चिह्नxका अनुसरण करता है।14.5 - 3*4.1 = 2.2।remainder: परिणाम का चिह्न ऐसा होता है कि परिमाण न्यूनतम हो।14.5 - 4*4.1 = -1.9(|-1.9| < |2.2|)।- शून्य से विभाजन:
NaNरिटर्न करता है,FE_INVALIDउठा सकता है।
फ्लोट/लॉन्ग डबल वेरिएंट्स
float fmodf(float x, float y); long double fmodl(long double x, long double y); float remainderf(float x, float y); long double remainderl(long double x, long double y);