pow(float,float);
pow(float,int);
pow(double,double);// taken over from C
pow(double,int);
pow(longdouble,longdouble);
pow(longdouble,int);
Jetzt können Sie nicht einfach tun
pow(2, N)
mit N ein int zu sein, weil es nicht dem von nicht kennt float, doubleoder long doubleVersion es dauern soll, und Sie würden einen Zweideutigkeit Fehler. Alle drei würden eine Konvertierung von int in Gleitkomma benötigen, und alle drei sind gleich teuer!
Stellen Sie daher sicher, dass das erste Argument so eingegeben wird, dass es perfekt zu einem dieser drei Argumente passt. Ich benutze normalerweisedouble
pow(2.0, N)
Wieder ein Anwalt von mir. Ich bin selbst oft in diese Falle geraten, deshalb werde ich Sie davor warnen.
int N; pow(2.0, N)wäre immer noch mehrdeutig :: could be 'pow(double,int)' or 'pow(double,double)'- / → Besetzung
Marvin
3
Ich empfehle, meinen Kommentar zu lesen, bevor Sie einen Kommentar hinzufügen. ;-) Ich erklärte, dass es eine Mehrdeutigkeit gibt. (Compiler von VS2008)
Marvin
1
@ Marvin: Visual C ++ 2010 Express hat kein Problem mit std::pow(2.0, 3).
Keith Thompson
5
@Marvin Da ich im Laufe der Zeit arroganter geworden bin, werde ich noch einmal antworten: Sie haben nicht gesagt "... wird vom Compiler als mehrdeutig abgelehnt ...", aber Sie sagten "... wäre immer noch mehrdeutig : ... ", für die Sie keine Sicherung bereitgestellt haben. Hinweise auf das Verhalten des Compilers mögen eine Sicherung sein, aber wenn ich unabhängig von Compilern anhand der ersten Prinzipien (der Spezifikation selbst) gezeigt habe, dass dies nicht mehrdeutig ist, habe ich die höhere Ebene. Leider können C ++ - Compiler Fehler aufweisen.
Johannes Schaub - litb
1
Ich denke, das ist auch pow(2, N)seit C ++ 11 eindeutig, da es eine Vorlagenfunktion gibt, die einen beliebigen arithmetischen Typ als Parameter empfängt.
Ale
28
In C ++ ist der Operator "^" ein bitweises ODER. Es funktioniert nicht, um sich zu einer Macht zu erheben. Das x << n ist eine Linksverschiebung der Binärzahl, die der Multiplikation von x mit 2 n entspricht und nur verwendet werden kann, wenn 2 auf eine Potenz angehoben wird. Die POW-Funktion ist eine mathematische Funktion, die generisch funktioniert.
Insbesondere 1 << nist das gleiche wie das Erhöhen von 2 auf die Potenz n oder 2^n.
Ashish Ahuja
1
Für diejenigen, die nicht verstanden haben, warum die "1" in 1 << n@AshishAhuja Kommentar ist, ist es, weil die Serie 1 << 0 = 1seitdem so läuft 2^0 = 1; 1 << 1 = 2seit 2^1 = 2; 1 << 2 = 4seit 2^2 = 4 und so weiter ...
JS5
16
Sie sollten in der Lage sein, normale C-Methoden in der Mathematik zu verwenden.
#include <cmath>
pow(2,3)
Wenn Sie sich auf einem Unix-ähnlichen System befinden, man cmath
Dies pow( base, exp )ist zwar ein guter Vorschlag, aber beachten Sie, dass er normalerweise im Gleitkomma funktioniert.
Dies kann oder kann nicht das sein, was Sie wollen: Auf einigen Systemen ist eine einfache Schleife, die auf einem Akkumulator multipliziert wird, für ganzzahlige Typen schneller.
Und für Quadrate können Sie die Zahlen genauso gut selbst multiplizieren, Gleitkomma oder Ganzzahl. Es ist nicht wirklich eine Abnahme der Lesbarkeit (IMHO) und Sie vermeiden den Leistungsaufwand eines Funktionsaufrufs.
Und ja, dies mag in die Kategorie "vorzeitige Optimierung" fallen, aber ich finde es immer gut, sich solcher Dinge bewusst zu sein - insbesondere, wenn Sie in Umgebungen mit begrenzten Ressourcen programmieren müssen.
Leander
11
Ich habe nicht genug Ruf, um Kommentare abzugeben, aber wenn Sie gerne mit QT arbeiten, haben sie eine eigene Version.
#include<QtCore/qmath.h>
qPow(x, y);// returns x raised to the y power.
Oder wenn Sie QT nicht verwenden, hat cmath im Grunde das Gleiche.
#include<cmath>double x =5, y =7;//As an example, 5 ^ 7 = 78125
pow(x, y);//Should return this: 78125
#include<iostream>#include<conio.h>usingnamespace std;double raiseToPow(double,int)//raiseToPow variable of type double which takes arguments (double, int)void main(){double x;//initializing the variable x and i int i;
cout<<"please enter the number";
cin>>x;
cout<<"plese enter the integer power that you want this number raised to";
cin>>i;
cout<<x<<"raise to power"<<i<<"is equal to"<<raiseToPow(x,i);}
// Definition der Funktion liftToPower
double raiseToPow(double x,int power){double result;int i;
result =1.0;for(i=1, i<=power;i++){
result = result*x;}return(result);}
powf () ist eine C99-Funktion, die nicht in C ++ enthalten ist.
Newacct
6
Viele Antworten haben pow()oder ähnliche Alternativen oder ihre eigenen Implementierungen vorgeschlagen. Um jedoch die Beispiele gegeben ( 2^1, 2^2und 2^3) in Frage, würde ich raten , ob Sie nur erhöhen müssen , 2um eine ganzzahlige Potenz. Wenn dies der Fall ist, würde ich Ihnen empfehlen, 1 << nfür zu verwenden 2^n.
int power (int i,int ow)// works only for ow >= 1{// but does not require <cmath> library!=)if(ow >1){
i = i * power (i, ow -1);}return i;}
cout << power(6,7);//you can enter variables here
Ich benutze die Bibliothek cmathoder math.hum die Bibliotheksfunktionen zu nutzen pow(), die sich um die Befugnisse kümmern
#include<iostream>#include<cmath>int main(){double number,power, result;
cout<<"\nEnter the number to raise to power: ";
cin>>number;
cout<<"\nEnter the power to raise to: ";
cin>>power;
result = pow(number,power);
cout<<"\n"<< number <<"^"<< power<<" = "<< result;return0;}
Verwenden Sie die Funktion pow () in der Bibliothek cmath, tgmath oder math.h.
#include<iostream>#include<cmath>usingnamespace std;int main(){int a,b;
cin >> a >> b;
cout << pow(a,b)<< endl;// this calculates a^breturn0;}
Beachten Sie, dass die Antwort auf die von double hochgestuft wird, wenn Sie die Leistung als einen anderen Datentyp als long double eingeben. Das heißt, es wird Eingabe genommen und Ausgabe als doppelt ausgegeben. Für lange Doppeleingänge ist der Rückgabetyp Long Double. zum Ändern der Antwort in int use ist int c = (int) pow (a, b)
Beachten Sie jedoch, dass dies bei einigen Zahlen zu einer Zahl führen kann, die unter der richtigen Antwort liegt. Wenn Sie beispielsweise 5 ^ 2 berechnen müssen, kann die Antwort auf einigen Compilern als 24.99999999999 zurückgegeben werden. Wenn Sie den Datentyp in int ändern, lautet die Antwort 24 statt 25 die richtige Antwort. Also mach das
int c=(int)(pow(a,b)+0.5)
Jetzt ist Ihre Antwort richtig. Bei sehr großen Zahlen gehen Daten verloren, wenn der Datentyp double in long long int geändert wird. Zum Beispiel schreibst du
longlongint c=(longlongint)(pow(a,b)+0.5);
und geben Sie Eingabe a = 3 und b = 38 ein, dann wird das Ergebnis 1350851717672992000 sein, während die richtige Antwort 1350851717672992089 lautet. Dies geschieht, weil die Funktion pow () 1.35085e + 18 zurückgibt, die als 1350851717672992000 auf int heraufgestuft wird. Ich schlage vor, a zu schreiben benutzerdefinierte Power-Funktion für solche Szenarien, wie: -
Antworten:
pow () in der cmath-Bibliothek. Mehr Infos hier . Vergessen Sie nicht,
#include<cmath>
oben in die Datei zu setzen.quelle
std::pow
im<cmath>
Header hat diese Überladungen:Jetzt können Sie nicht einfach tun
mit N ein int zu sein, weil es nicht dem von nicht kennt
float
,double
oderlong double
Version es dauern soll, und Sie würden einen Zweideutigkeit Fehler. Alle drei würden eine Konvertierung von int in Gleitkomma benötigen, und alle drei sind gleich teuer!Stellen Sie daher sicher, dass das erste Argument so eingegeben wird, dass es perfekt zu einem dieser drei Argumente passt. Ich benutze normalerweise
double
Wieder ein Anwalt von mir. Ich bin selbst oft in diese Falle geraten, deshalb werde ich Sie davor warnen.
quelle
int N; pow(2.0, N)
wäre immer noch mehrdeutig ::could be 'pow(double,int)' or 'pow(double,double)'
- / → Besetzungstd::pow(2.0, 3)
.pow(2, N)
seit C ++ 11 eindeutig, da es eine Vorlagenfunktion gibt, die einen beliebigen arithmetischen Typ als Parameter empfängt.In C ++ ist der Operator "^" ein bitweises ODER. Es funktioniert nicht, um sich zu einer Macht zu erheben. Das x << n ist eine Linksverschiebung der Binärzahl, die der Multiplikation von x mit 2 n entspricht und nur verwendet werden kann, wenn 2 auf eine Potenz angehoben wird. Die POW-Funktion ist eine mathematische Funktion, die generisch funktioniert.
quelle
1 << n
ist das gleiche wie das Erhöhen von 2 auf die Potenz n oder2^n
.1 << n
@AshishAhuja Kommentar ist, ist es, weil die Serie1 << 0 = 1
seitdem so läuft2^0 = 1
;1 << 1 = 2
seit2^1 = 2
;1 << 2 = 4
seit2^2 = 4
und so weiter ...Sie sollten in der Lage sein, normale C-Methoden in der Mathematik zu verwenden.
#include <cmath>
pow(2,3)
Wenn Sie sich auf einem Unix-ähnlichen System befinden,
man cmath
Fragen Sie das?
Sujal
quelle
Verwenden Sie die Funktion pow (x, y): Siehe hier
Fügen Sie einfach math.h hinzu und schon sind Sie fertig.
quelle
Dies
pow( base, exp )
ist zwar ein guter Vorschlag, aber beachten Sie, dass er normalerweise im Gleitkomma funktioniert.Dies kann oder kann nicht das sein, was Sie wollen: Auf einigen Systemen ist eine einfache Schleife, die auf einem Akkumulator multipliziert wird, für ganzzahlige Typen schneller.
Und für Quadrate können Sie die Zahlen genauso gut selbst multiplizieren, Gleitkomma oder Ganzzahl. Es ist nicht wirklich eine Abnahme der Lesbarkeit (IMHO) und Sie vermeiden den Leistungsaufwand eines Funktionsaufrufs.
quelle
Ich habe nicht genug Ruf, um Kommentare abzugeben, aber wenn Sie gerne mit QT arbeiten, haben sie eine eigene Version.
Oder wenn Sie QT nicht verwenden, hat cmath im Grunde das Gleiche.
quelle
// Definition der Funktion liftToPower
quelle
Wenn Sie sich nur mit base_2 befassen möchten, empfehle ich die Verwendung des Linksverschiebungsoperators << anstelle der Mathematikbibliothek .
Beispielcode :
Beispielausgabe:
quelle
Es ist pow oder powf in
<math.h>
Es gibt keinen speziellen Infix-Operator wie in Visual Basic oder Python
quelle
Viele Antworten haben
pow()
oder ähnliche Alternativen oder ihre eigenen Implementierungen vorgeschlagen. Um jedoch die Beispiele gegeben (2^1
,2^2
und2^3
) in Frage, würde ich raten , ob Sie nur erhöhen müssen ,2
um eine ganzzahlige Potenz. Wenn dies der Fall ist, würde ich Ihnen empfehlen,1 << n
für zu verwenden2^n
.quelle
Ihr ursprünglicher Fragentitel ist irreführend. Verwenden Sie, um nur zu quadratisieren
2*2
.quelle
Beachten Sie, dass die Verwendung von
pow(x,y)
weniger effizient ist alsx*x*x
y-mal, wie hier gezeigt und beantwortet https://stackoverflow.com/a/2940800/319728 .Also, wenn Sie Effizienz nutzen möchten
x*x*x
.quelle
quelle
Ich benutze die Bibliothek
cmath
odermath.h
um die Bibliotheksfunktionen zu nutzenpow()
, die sich um die Befugnisse kümmernquelle
Zuerst hinzufügen,
#include <cmath>
dann können Sie diepow
Methode in Ihrem Code verwenden, zum Beispiel:Welches 3.5 ist Basis und 3 ist exp
quelle
Verwenden Sie die Funktion pow () in der Bibliothek cmath, tgmath oder math.h.
Beachten Sie, dass die Antwort auf die von double hochgestuft wird, wenn Sie die Leistung als einen anderen Datentyp als long double eingeben. Das heißt, es wird Eingabe genommen und Ausgabe als doppelt ausgegeben. Für lange Doppeleingänge ist der Rückgabetyp Long Double. zum Ändern der Antwort in int use ist int c = (int) pow (a, b)
Beachten Sie jedoch, dass dies bei einigen Zahlen zu einer Zahl führen kann, die unter der richtigen Antwort liegt. Wenn Sie beispielsweise 5 ^ 2 berechnen müssen, kann die Antwort auf einigen Compilern als 24.99999999999 zurückgegeben werden. Wenn Sie den Datentyp in int ändern, lautet die Antwort 24 statt 25 die richtige Antwort. Also mach das
Jetzt ist Ihre Antwort richtig. Bei sehr großen Zahlen gehen Daten verloren, wenn der Datentyp double in long long int geändert wird. Zum Beispiel schreibst du
und geben Sie Eingabe a = 3 und b = 38 ein, dann wird das Ergebnis 1350851717672992000 sein, während die richtige Antwort 1350851717672992089 lautet. Dies geschieht, weil die Funktion pow () 1.35085e + 18 zurückgibt, die als 1350851717672992000 auf int heraufgestuft wird. Ich schlage vor, a zu schreiben benutzerdefinierte Power-Funktion für solche Szenarien, wie: -
und dann rufen Sie es an, wann immer Sie möchten,
Verwenden Sie für Zahlen, die größer als der Bereich von long long int sind, entweder die Boost-Bibliothek oder Zeichenfolgen.
quelle
__
sind , sind reserviert, Sie sollten wahrscheinlich etwas anderes auswählen.