pow(float,float);
pow(float,int);
pow(double,double);// taken over from C
pow(double,int);
pow(longdouble,longdouble);
pow(longdouble,int);
Sekarang Anda tidak bisa begitu saja melakukannya
pow(2, N)
dengan N menjadi int, karena tidak tahu mana float, doubleatau long doubleversi harus mengambil, dan Anda akan mendapatkan error ambiguitas. Ketiganya akan membutuhkan konversi dari int ke floating point, dan ketiganya sama-sama mahal!
Oleh karena itu, pastikan untuk mengetik argumen pertama sehingga cocok dengan salah satu dari ketiga argumen tersebut dengan sempurna. Saya biasanya menggunakandouble
pow(2.0, N)
Beberapa pengacara mengerjai saya lagi. Saya sendiri sering jatuh dalam perangkap ini, jadi saya akan memperingatkan Anda tentang hal itu.
int N; pow(2.0, N)masih akan ambigu:: could be 'pow(double,int)' or 'pow(double,double)'- / → pemeran
Marvin
3
Saya merekomendasikan untuk membaca komentar saya sebelum menambahkan komentar. ;-) Saya menjelaskan bahwa TIDAK memberikan ambiguitas. (Kompiler VS2008)
Marvin
1
@Marvin: Visual C ++ 2010 Express tidak memiliki masalah dengan std::pow(2.0, 3).
Keith Thompson
5
@Marvin karena saya telah tumbuh lebih arogan dari waktu ke waktu, saya akan menjawab sekali lagi: Anda tidak mengatakan "... ditolak sebagai ambigu oleh kompiler ..." tetapi Anda berkata "... masih akan ambigu : ... ", yang untuknya Anda tidak mencadangkan. Memberi petunjuk pada perilaku kompiler mungkin cadangan, tetapi jika saya telah menunjukkan secara independen dari kompiler dari prinsip pertama (spesifikasi itu sendiri) bahwa ini tidak ambigu, saya punya tempat yang lebih tinggi. Sayangnya, kompiler C ++ mungkin memiliki bug.
Johannes Schaub - litb
1
Saya pikir itu juga pow(2, N)tidak ambigu sejak C ++ 11, karena ada fungsi templat yang menerima tipe aritmatika sebagai parameter.
Ale
28
Dalam C ++ operator "^" adalah bitwise OR. Itu tidak bekerja untuk meningkatkan kekuatan. X << n adalah pergeseran kiri dari angka biner yang sama dengan mengalikan x dengan 2 n beberapa kali dan itu hanya dapat digunakan saat menaikkan 2 menjadi daya. Fungsi POW adalah fungsi matematika yang akan bekerja secara umum.
Secara khusus, 1 << nsama dengan menaikkan 2 pangkat n, atau 2^n.
Ashish Ahuja
1
Bagi mereka yang tidak mengerti mengapa "1" di 1 << ndalam @AshishAhuja berkomentar, itu karena seri seperti ini 1 << 0 = 1sejak itu 2^0 = 1; 1 << 1 = 2sejak 2^1 = 2; 1 << 2 = 4sejak 2^2 = 4 dan seterusnya ...
JS5
16
Anda harus dapat menggunakan metode C normal dalam matematika.
#include <cmath>
pow(2,3)
jika Anda menggunakan sistem seperti unix, man cmath
Meskipun pow( base, exp )merupakan saran yang bagus, perlu diketahui bahwa ini biasanya bekerja di floating-point.
Ini mungkin atau mungkin bukan yang Anda inginkan: pada beberapa sistem pengulangan loop sederhana pada akumulator akan lebih cepat untuk tipe integer.
Dan untuk bujur sangkar secara khusus, Anda bisa juga mengalikan angka-angka itu sendiri, floating-point atau integer; itu tidak benar-benar penurunan keterbacaan (IMHO) dan Anda menghindari kinerja overhead panggilan fungsi.
Dan ya, ini mungkin termasuk dalam kategori "optimisasi prematur", tetapi saya selalu merasa senang mengetahui hal-hal seperti ini - terutama jika Anda harus memprogram di lingkungan sumber daya terbatas.
leander
11
Saya tidak memiliki reputasi yang cukup untuk berkomentar, tetapi jika Anda suka bekerja dengan QT, mereka memiliki versinya sendiri.
#include<QtCore/qmath.h>
qPow(x, y);// returns x raised to the y power.
Atau jika Anda tidak menggunakan QT, cmath pada dasarnya memiliki hal yang sama.
#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);}
// definisi fungsi raisToPower
double raiseToPow(double x,int power){double result;int i;
result =1.0;for(i=1, i<=power;i++){
result = result*x;}return(result);}
Banyak jawaban telah menyarankan pow()atau alternatif serupa atau implementasi mereka sendiri. Namun, dengan memberikan contoh ( 2^1, 2^2dan 2^3) dalam pertanyaan Anda, saya kira apakah Anda hanya perlu meningkatkan 2daya integer. Jika hal ini terjadi, saya akan menyarankan Anda untuk menggunakan 1 << nuntuk 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
Saya menggunakan perpustakaan cmathatau math.huntuk memanfaatkan pow()fungsi perpustakaan yang mengurus kekuatan
#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;}
gunakan fungsi pow () dalam pustaka cmath, tgmath atau 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;}
harap dicatat bahwa jika Anda memberikan input ke kekuasaan karena semua tipe data selain panjang ganda, maka jawabannya akan naik menjadi ganda. itu akan mengambil input dan memberikan output dua kali lipat. untuk input ganda panjang, tipe pengembaliannya adalah ganda panjang. untuk mengubah jawaban untuk penggunaan int, int c = (int) pow (a, b)
Tetapi, perlu diingat untuk beberapa angka ini dapat menghasilkan angka kurang dari jawaban yang benar. jadi misalnya Anda harus menghitung 5 ^ 2, maka jawabannya dapat dikembalikan sebagai 24,99999999999 pada beberapa kompiler. pada mengubah tipe data ke int jawabannya adalah 24 daripada 25 jawaban yang benar. Jadi, lakukan ini
int c=(int)(pow(a,b)+0.5)
Sekarang, jawaban Anda benar. juga, untuk data angka yang sangat besar hilang dalam mengubah tipe data int ganda menjadi panjang. misalnya kamu menulis
longlongint c=(longlongint)(pow(a,b)+0.5);
dan beri input a = 3 dan b = 38 maka hasilnya akan keluar menjadi 1350851717672992000 sedangkan jawaban yang benar adalah 1350851717672992089, ini terjadi karena pow () mengembalikan fungsi 1.35085e + 18 yang dipromosikan ke int sebagai 1350851717672992000. Saya sarankan menulis sebuah fungsi daya khusus untuk skenario seperti itu, seperti: -
Jawaban:
pow () di perpustakaan cmath. Info lebih lanjut di sini . Jangan lupa letakkan
#include<cmath>
di bagian atas file.sumber
std::pow
di<cmath>
header memiliki kelebihan ini:Sekarang Anda tidak bisa begitu saja melakukannya
dengan N menjadi int, karena tidak tahu mana
float
,double
ataulong double
versi harus mengambil, dan Anda akan mendapatkan error ambiguitas. Ketiganya akan membutuhkan konversi dari int ke floating point, dan ketiganya sama-sama mahal!Oleh karena itu, pastikan untuk mengetik argumen pertama sehingga cocok dengan salah satu dari ketiga argumen tersebut dengan sempurna. Saya biasanya menggunakan
double
Beberapa pengacara mengerjai saya lagi. Saya sendiri sering jatuh dalam perangkap ini, jadi saya akan memperingatkan Anda tentang hal itu.
sumber
int N; pow(2.0, N)
masih akan ambigu::could be 'pow(double,int)' or 'pow(double,double)'
- / → pemeranstd::pow(2.0, 3)
.pow(2, N)
tidak ambigu sejak C ++ 11, karena ada fungsi templat yang menerima tipe aritmatika sebagai parameter.Dalam C ++ operator "^" adalah bitwise OR. Itu tidak bekerja untuk meningkatkan kekuatan. X << n adalah pergeseran kiri dari angka biner yang sama dengan mengalikan x dengan 2 n beberapa kali dan itu hanya dapat digunakan saat menaikkan 2 menjadi daya. Fungsi POW adalah fungsi matematika yang akan bekerja secara umum.
sumber
1 << n
sama dengan menaikkan 2 pangkat n, atau2^n
.1 << n
dalam @AshishAhuja berkomentar, itu karena seri seperti ini1 << 0 = 1
sejak itu2^0 = 1
;1 << 1 = 2
sejak2^1 = 2
;1 << 2 = 4
sejak2^2 = 4
dan seterusnya ...Anda harus dapat menggunakan metode C normal dalam matematika.
#include <cmath>
pow(2,3)
jika Anda menggunakan sistem seperti unix,
man cmath
Itukah yang kamu tanyakan?
Sujal
sumber
Gunakan fungsi pow (x, y): Lihat Di Sini
Cukup sertakan math.h dan Anda sudah siap.
sumber
Meskipun
pow( base, exp )
merupakan saran yang bagus, perlu diketahui bahwa ini biasanya bekerja di floating-point.Ini mungkin atau mungkin bukan yang Anda inginkan: pada beberapa sistem pengulangan loop sederhana pada akumulator akan lebih cepat untuk tipe integer.
Dan untuk bujur sangkar secara khusus, Anda bisa juga mengalikan angka-angka itu sendiri, floating-point atau integer; itu tidak benar-benar penurunan keterbacaan (IMHO) dan Anda menghindari kinerja overhead panggilan fungsi.
sumber
Saya tidak memiliki reputasi yang cukup untuk berkomentar, tetapi jika Anda suka bekerja dengan QT, mereka memiliki versinya sendiri.
Atau jika Anda tidak menggunakan QT, cmath pada dasarnya memiliki hal yang sama.
sumber
// definisi fungsi raisToPower
sumber
jika Anda hanya ingin berurusan dengan base_2 maka saya sarankan menggunakan operator shift kiri << bukan perpustakaan matematika .
Kode sampel :
output sampel:
sumber
Ada pow atau powf di
<math.h>
Tidak ada operator infiks khusus seperti di Visual Basic atau Python
sumber
Banyak jawaban telah menyarankan
pow()
atau alternatif serupa atau implementasi mereka sendiri. Namun, dengan memberikan contoh (2^1
,2^2
dan2^3
) dalam pertanyaan Anda, saya kira apakah Anda hanya perlu meningkatkan2
daya integer. Jika hal ini terjadi, saya akan menyarankan Anda untuk menggunakan1 << n
untuk2^n
.sumber
Judul pertanyaan awal Anda menyesatkan. Untuk hanya persegi , gunakan
2*2
.sumber
Perhatikan bahwa penggunaan
pow(x,y)
kurang efisien daripadax*x*x
y kali seperti yang ditunjukkan dan dijawab di sini https://stackoverflow.com/a/2940800/319728 .Jadi jika Anda menggunakan efisiensi
x*x*x
.sumber
sumber
Saya menggunakan perpustakaan
cmath
ataumath.h
untuk memanfaatkanpow()
fungsi perpustakaan yang mengurus kekuatansumber
Pertama tambahkan
#include <cmath>
maka Anda dapat menggunakanpow
metode dalam kode Anda misalnya:Yang 3.5 adalah basis dan 3 adalah exp
sumber
gunakan fungsi pow () dalam pustaka cmath, tgmath atau math.h.
harap dicatat bahwa jika Anda memberikan input ke kekuasaan karena semua tipe data selain panjang ganda, maka jawabannya akan naik menjadi ganda. itu akan mengambil input dan memberikan output dua kali lipat. untuk input ganda panjang, tipe pengembaliannya adalah ganda panjang. untuk mengubah jawaban untuk penggunaan int, int c = (int) pow (a, b)
Tetapi, perlu diingat untuk beberapa angka ini dapat menghasilkan angka kurang dari jawaban yang benar. jadi misalnya Anda harus menghitung 5 ^ 2, maka jawabannya dapat dikembalikan sebagai 24,99999999999 pada beberapa kompiler. pada mengubah tipe data ke int jawabannya adalah 24 daripada 25 jawaban yang benar. Jadi, lakukan ini
Sekarang, jawaban Anda benar. juga, untuk data angka yang sangat besar hilang dalam mengubah tipe data int ganda menjadi panjang. misalnya kamu menulis
dan beri input a = 3 dan b = 38 maka hasilnya akan keluar menjadi 1350851717672992000 sedangkan jawaban yang benar adalah 1350851717672992089, ini terjadi karena pow () mengembalikan fungsi 1.35085e + 18 yang dipromosikan ke int sebagai 1350851717672992000. Saya sarankan menulis sebuah fungsi daya khusus untuk skenario seperti itu, seperti: -
dan kemudian menyebutnya kapan pun Anda mau,
Untuk angka yang lebih besar dari rentang int panjang, baik gunakan boost library atau string.
sumber
__
disediakan, Anda mungkin harus memilih sesuatu yang lain.