Jump to content
  • 0

pomoc Modulo na floatoch


DuFF

Dotaz

Zdravím.

Môj problém:
Na vstupe sú 2 desatinné čísla.
Prvé (x) je nezáporné, druhé (y) je buď 3.30 alebo 4.95.
Zaujíma ma, či je prvé číslo (x) po zaokrúhlení na 2 desatinné miesta násobkom druhého čísla (y).
Chcem vrátiť 0, ak je násobkom a nenulové číslo inak.
Príklady: 
(9.90, 3.30) -> 0, 
(9.91, 3.30) -> nenulové číslo,
(9.90499999, 3.30) -> 0,
(9.905, 3.30) -> nenulové číslo

Na celých číslach by som využil operátor %, ale operator%(Float:,Float:) nie je definovaný.

Zatiaľ som prišiel s niečím takýmto:

operator%(Float:x, Float:y)
{
    return floatround((x * 100), floatround_round) % floatround((y * 100), floatround_round);
}

Ale nepríde mi to veľmi elegantné.
S floatmi nepracujem často, viem, že sú tam nejaké problémy s presnosťou...
Bol by som rád, keby ste mi poradili, ako to spraviť elegantnejšie, prípadne povedali, čo sa môže v mojom riešení pokaziť.

PS: Keby sa niekto pýtal, k čomu mi to je, ide o detekciu upraveného poškodenia pri zbraniach shotgun, sawn-off shotgun a combat shotgun (jeden brok berie 3.30, u combat 4.95).

Link to comment
Share on other sites

2 odpovědí na tuto otázku

Recommended Posts

  • 0

No lepsi reseni nez toho me momentalne nenapada

Float:operator%(Float:x, Float:y)
{
	while(x > y) x -= y;
    return x;
}

printf("%f",5.2%3.0);

  • Děkuji (+1) 1
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
před 10 hodinami, ATomas said:

No lepsi reseni nez toho me momentalne nenapada


Float:operator%(Float:x, Float:y)
{
	while(x > y) x -= y;
    return x;
}

printf("%f",5.2%3.0);

Ďakujem, podobnú odpoveď som si od teba prečítal aj pred 2 rokmi (aj keď je teraz zmazaná) 😀

Možno radšej while (x >= y)

Edited by DuFF
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...