Giriş
Metodun imzası şöyle. x/y = z işleminde x bölünen, y bölen, z bölümdür. fmod z değerini değil kalanı verir.
#include <math.h>
double fmod(double x, double y);
float fmodf(float x, float y);
long double fmodl(long double x, long double y);
Açıklaması şöyle.
The floating-point remainder of the division operation x/y calculated by this function is exactly the value x - n*y, where n is x/y with its fractional part truncated.
The returned value has the same sign as x and is less than y in magnitude.
Bu yazıyla ilgili olarak std::modulus yazısına da bakılabilir.
Neden std::fmod Gerekir
Normalde "modulus operatorünün" sağ tarafına bir tam sayının gelmesi gerekir. Eğer gelmezse derleyici aşağıdaki gibi bir hata verir. Yani şu kod için
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
Şöyle bir hata alırız.
Bu durumda fmod metodunu kullamak gerekir. "Modulus operatöründen" farklı olarak double bir değer döndürüyor.error: invalid operands of types 'double' and 'double' to binary 'operator%'
Örnek
Elimizde şöyle bir kod olsun.
std::fmod(+5.1, +3.0) = 2.1
Açıklaması şöyle.when x = +5.1 and y = +3.0, x/y (5.1/3.0 = 1.7) with its fractional part truncated is 1. So n is 1. So the fmod will yield x - 1*y which is 5.1 - 1 * 3.0 which is 5.1 - 3.0 which is 2.1.Örnek
Şöyle yaparız.
double a=fmod(4.1,1.0);
cerr<<std::setprecision(0)<<a<<"\n";
cerr<<std::setprecision(10)<<a<<"\n";
cerr<<std::setprecision(20)<<a<<"\n";
Çıktı olarak şunu alırız.
Şöyle yaparız.
0.1
0.1
0.099999999999999644729
ÖrnekŞöyle yaparız.
cout << "fmod of 5.3 / 2.0 is " << fmod (5.3,2) << endl;
Eksi Sonuç
fmod eksi sayı verebilir. Örneğin fmod (-3,4) = -3 verir. Modulus operatörü de eksi bir sayı döndürebilir. Dolayısıyla modulus operatörü ile sayının eksi veya artık olmasına bakmadan tek/çift olduğunu kontrol etmek için aşağıdaki gibi yapılabilir.
public static boolean isOdd(int i) {
return i % 2 != 0;
}
Hiç yorum yok:
Yorum Gönder