2013-08-07 286 views
26

So come ottenere la radice quadrata di un numero utilizzando la funzione sqrt.Come posso ottenere la radice cubica in C++?

Come ottenere la radice cubo di un numero?

+8

Si intende la radice cubica, non la "radice quadrata con radice 3". –

+7

È possibile utilizzare pow(), con la potenza 1/3 – Kotte

+0

http://stackoverflow.com/questions/7463486/cube-root-of-unumber – acraig5075

risposta

48

sqrt sta per "radice quadrata" e "radice quadrata" significa che aumenta alla potenza di 1/2. Non esistono cose come "radice quadrata con radice 2" o "radice quadrata con radice 3". Per other roots, si modifica la prima parola; nel tuo caso, stai cercando come eseguire il rooting dei cubi .

Prima di C++ 11, non esiste una funzione specifica per questo, ma si può tornare ai principi originari:

  • Radice quadrata: std::pow(n, 1/2.) (o std::sqrt(n)) radice
  • Cube: std::pow(n, 1/3.) (o std::cbrt(n) dal C++ 11)
  • quarta radice: std::pow(n, 1/4.)
  • ecc

Se ci si aspetta di passare valori negativi per n, evitare il std::pow soluzione — it doesn't support negative inputs with fractional exponents, e questo è il motivo per cui è stato aggiunto std::cbrt:

std::cout << std::pow(-8, 1/3.) << '\n'; // Output: -nan 
std::cout << std::cbrt(-8)  << '\n'; // Output: -2 

N.B. Che . è davvero importante, perché altrimenti 1/3 utilizza la divisione intera e produce 0.

+0

Intendo Sqrt non quadrato, ad esempio sqrt (4) = 2; –

+3

@HavaDarabi: non capisco. 'sqrt' sta per" radice quadrata "che ti piaccia o no, e' sqrt (4) '_is_' 2'. –

+2

+1 per la nota. è di fondamentale importanza – xis

0

L'ennesima radice di x è uguale a x^(1/n), quindi utilizzare std::pow. Ma non vedo cosa questo debba fare con l'overloading dell'operatore.

+0

Voglio sovraccaricare l'operatore sqrt !!! Come posso farlo? –

+2

@Hava: 'sqrt' non è un" operatore "e non è possibile" sovraccaricarlo "per eseguire una cosa diversa con gli stessi argomenti. La tua terminologia è completamente sbagliata. –

+1

@HavaDarabi no, non è – OrangeDog

8

in C++ 11 std::cbrt è stato introdotto come parte della matematica biblioteca, si può refer

0
  1. sqrt() non è un operatore.
  2. Non è possibile sovraccaricare sqrt().

Si prega di spiegare perché è necessario sovraccaricare `sqrt()` in modo che possiamo aiutarvi a fare quello che vuoi.

0

Scorrei uno dei metodi sopra indicati perché non hanno funzionato per me. Ho fatto pow (64, 1/3.) Insieme a pow (64, 1./3.) ma la risposta che ho ottenuto è stata 3
Ecco la mia logica.

ans = pow(n, 1/3.); 
if (pow(ans, 3) != n){ 
    ans++; 
} 
0

In realtà il round deve andare per le soluzioni di cui sopra per funzionare.

La soluzione corretta sarebbe

ans = rotonde (POW (n, 1./3).);

Problemi correlati