Jump to content
  • 0
Quiter

pomoc Floor v c++

Dotaz

Čaute, mám taký problém, že v kóde používam odmocninu Nteho stupňa a použil som funkciu pow.

int tmpC = (int)pow(tmpZ, 1.0 / (double)mocnina);

Ako vidíte, potrebujem z tejto hodnoty odstrániť desatinnú časť (inými slovami zaokruhliť na dol). Problém je v tom že v niektorých hodnotách to odreže nesprávne...

mocnina = 3;
tmpZ = 125;
(int)pow(tmpZ, 1.0 / (double)mocnina) // = 4
pow(tmpZ, 1.0 / (double)mocnina) // = 5

tmpZ = 343;
(int)pow(tmpZ, 1.0 / (double)mocnina) // = 6
pow(tmpZ, 1.0 / (double)mocnina) // = 7

Predpokladám že problém nastáva kvôli tomu, že double má hodnotu 4.99999999 a 6.9999999 a teda po urezaní je to 4 a 6...

Vedel by mi niekto poradiť ako toto vyriešiť? (Žiadne hodnoty natvrdo - hore sú uvedené len 2 príklady ale určite ich je viac)

Taktiež som skúšal funkciu floor - spraví presne to isté. A tiež nemôžem použiť sqrt alebo cbrt pretože mocnina môže mať hodnoty 1-10

Sdílet tento příspěvek


Link to post
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 0
před 7 hodinami, Quiter said:

Díky,

použil som nasledujúcu korekciu z tvojho odkazu:


if (pow(tmpC + 1, mocnina) <= tmpZ)
	++tmpC;

 

Možno si ešte over, či ti to funguje správne aj pre záporné čísla. Napadá mi scenár, že budeš chcieť počítať napr. 3. odmocninu z -125.. pow(-125, 1.0 / 3.0) by ti mohlo vrátiť napr. -4.9999 a táto korekcia by v tomto prípade podľa mňa nefungovala.

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
před 11 hodinami, DuFF said:

Možno si ešte over, či ti to funguje správne aj pre záporné čísla. Napadá mi scenár, že budeš chcieť počítať napr. 3. odmocninu z -125.. pow(-125, 1.0 / 3.0) by ti mohlo vrátiť napr. -4.9999 a táto korekcia by v tomto prípade podľa mňa nefungovala.

Netreba, zadanie je od 1 do 1 000 000 :) ale dobrá pripomienka

Sdílet tento příspěvek


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Odpovědět na dotaz...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Obnovili jsme váš původní obsah (obsah napsaný před zavřením).   Smazat obnovený obsah

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...