Portál AbcLinuxu, 24. dubna 2024 13:26


Dotaz: problem s fmod v math.h

26.11.2005 21:19 Alienrebell | skóre: 4
problem s fmod v math.h
Přečteno: 178×
Odpovědět | Admin
ahoj chytre hlavy. Nechce mi korektne fungovat funkce fmod z mat. knihovny math.h . Dokonce jsem si stahl vzorovy program s fmod, ale i ten nepracuje spravne. zde mam vlozene potrebne knihovny. stdio a math

int main(void) { double x = 5.0, y = 2.0; double result; result = fmod(x, y); printf("Zbytek pri (%lf / %lf) je %lf\n", x, y, result); return 0; }

Me to pise vysledek 1.000000. Prosim poradte mi ja tuto chybu opravit. Dekuji pozn: prekladac ani nepipne (-lm tam mam).
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.11.2005 21:40 Radek Šlesinger | skóre: 13 | Adamov
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jazyk C neovladam, ale ten vysledek se mi jevi naprosto spravny, pokud neni problem v necem jinem.
26.11.2005 21:46 Alienrebell | skóre: 4
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Ahoj, fmod by mel vycislovat zbytek po deleni. Tj 5/2=2,5 a fmod mi ma ulozit do promenne 0,5. Jenze v mem pripade ulozi 1.
Luboš Doležel (Doli) avatar 26.11.2005 21:51 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Asi byste se měl vrátit na základní školu.
27.11.2005 00:23 Alienrebell | skóre: 4
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Copak se Vam nelibi na tom, ze 5 / 2 = 2,5 ?
27.11.2005 00:27 #Tom
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Doporučuju k přečtení manuálovou stránku: man fmod. Je to prostě definice a té tato funkce plně vyhovuje.
27.11.2005 00:35 Alienrebell | skóre: 4
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Tak doporucis mi prosim jinou fci, kterou dostanu po 5 / 2, 0,5 do promenne?
27.11.2005 00:42 #Tom
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Matematický požadevek zní jednoduše - odstranit z reálného čísla jeho celou část. Takže pokud d je nějaké reálné číslo (typu double, tak jeho desetinná část se získá takto:
double d;
...
d -= floor(d);
27.11.2005 01:04 Alienrebell | skóre: 4
Rozbalit Rozbalit vše Re: problem s fmod v math.h
hmmmmm, klanim se a dekuji.
Luboš Doležel (Doli) avatar 27.11.2005 01:38 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: problem s fmod v math.h
fmod(x, y)/y
Luboš Doležel (Doli) avatar 27.11.2005 01:33 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: problem s fmod v math.h
5 / 2 = 2, zbytek je 1
26.11.2005 21:51 #Tom
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Problém je v tom, že to je zbytek po celočíselném dělení. Výsledek tedy musí být roven něčemu, jako je tohle:
double fmod(double a, double b) {
  return a - ((long int) a / (long int) b) * (long int) b;
}
26.11.2005 21:52 Radek Šlesinger | skóre: 13 | Adamov
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Zbytek po deleni ma smysl definovat pouze v celych cislech. V racionalnich cislech deli vsechno vse (az na nejake vyjimky s nulou), tudiz nas eventualni zbytek by byl 0. Jinak mame, ze 5 = 2*2 + 1, takze ta funkce skutecne vraci dobry vysledek.
27.11.2005 00:32 Alienrebell | skóre: 4
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Kluci, prave ze na koleji mi to jelo. Delam program funkce cosinus (ale nesmim pouzit primo cos z math.h), mno a kdyz zadam na vstup vesti cislo nez je 1, tak musim vstup tj >1 vydelit 2PI. A potrebuji ten zbytek po deleni, abych mohl dal pocitat. Uz jsem si na to udelal nejaky algoritmus, ale zbytecne dalsi promenne atd. . fmod uz to mod naznacuje, ze by to mel byt zbytek po modulo deleni, takze mate asi pravdu. Jenze me to slo vyjadrit vyjadrit to desetinne cislo pomoci toho fmodu. :-( Tak kde je tedy ten pes zakopany?
27.11.2005 01:06 #Tom
Rozbalit Rozbalit vše Jedna z možností
double cos2(double x) {
  x /= 2 * M_PI;
  x -= floor(x);
  x *= 2 * M_PI;
  x *= x;
  double v[4] = { 0, 0, 1, 1 };
  double mul = 1;
  double fakt = 1;
  unsigned long int n;
  unsigned int i = 0;
  for (n = 1; v[0] != v[2] && v[1] != v[3];) {
    v[i + 2] = v[i];
    v[i] += mul / fakt;
    mul *= x;
    fakt *= n++;
    fakt *= n++;
    i ^= 1;
  }
  return v[0] - v[1];
}
27.11.2005 01:08 Alienrebell | skóre: 4
Rozbalit Rozbalit vše Re: problem s fmod v math.h
Dekuji za rady. Asi to opravdu vsechno vzniklo mym nepochopenim fce fmod :-( . Vyresim na zaklade dobre rady to takto:
double d;
...
d -= floor(d);
Dekuji Vam vsem za prispevky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.