किसी संख्या को शक्ति में बढ़ाने के लिए C ++ फ़ंक्शन क्या है?


132

मैं एक संख्या को एक शक्ति में कैसे बढ़ाऊं?

2^1

2^2

2^3

आदि...


शीर्षक भ्रामक था। यह सामान्य रूप से शक्तियों के बारे में है, न कि केवल स्क्वरिंग में। मैंने इसे संपादित किया और इसे ठीक किया।
जिफरे

30
यदि यह सामान्य रूप से 2 की शक्तियों के बारे में है, तो << का उपयोग करें।
थॉमस एल होलाडे

1
हां, यह पूर्णांकों के लिए काम करेगा । । ।
imallett

3
विशेष रूप से, एक सीमित डोमेन के पूर्णांक । यहां तक ​​कि सिर्फ 2 ^ 70 एक पूर्णांक को ओवरफ्लो कर देगा (लेकिन एक फ्लोट इसे सटीक रूप से प्रस्तुत कर सकता है )
पोंकाडूडल

जवाबों:



96

std::powमें <cmath>शीर्ष लेख इन भार के होते हैं:

pow(float, float);
pow(float, int);
pow(double, double); // taken over from C
pow(double, int);
pow(long double, long double);
pow(long double, int);

अब तुम बस नहीं कर सकते

pow(2, N)

एन, किसी पूर्णांक किया जा रहा है, क्योंकि यह जिनमें से पता नहीं है के साथ float, doubleया long doubleसंस्करण यह लग सकते हैं और आप एक अस्पष्टता त्रुटि मिलेगा। सभी तीनों को अंतर से फ्लोटिंग पॉइंट तक रूपांतरण की आवश्यकता होगी, और तीनों समान रूप से महंगे हैं!

इसलिए, सुनिश्चित करें कि पहला तर्क टाइप किया गया है, इसलिए यह उन तीनों में से एक से पूरी तरह मेल खाता है। मैं आमतौर पर उपयोग करता हूंdouble

pow(2.0, N)

कुछ वकील फिर से मुझसे बकवास करते हैं। मैं अक्सर इस ख़तरे में पड़ गया हूं, इसलिए मैं आपको इसके बारे में चेतावनी देने जा रहा हूं।


int N; pow(2.0, N)अभी भी अस्पष्ट होगा could be 'pow(double,int)' or 'pow(double,double)':: - / → डाली
मार्विन

3
मैं एक टिप्पणी जोड़ने से पहले मेरी टिप्पणी पढ़ने की सलाह देता हूं। ;-) मैंने समझाया कि यह एक अस्पष्टता देता है। (VS2008 का संकलक)
मार्विन

1
@ मारविन: विजुअल C ++ 2010 एक्सप्रेस के साथ कोई समस्या नहीं है std::pow(2.0, 3)
कीथ थॉम्पसन

5
@ मार्विन चूंकि मैं समय के साथ अधिक अभिमानी हो गया हूं, मैं एक बार फिर से उत्तर देने जा रहा हूं: आपने यह नहीं कहा "... संकलक द्वारा अस्पष्ट के रूप में खारिज कर दिया गया है ..." लेकिन आपने कहा "... अभी भी अस्पष्ट होगा : ... ", जिसके लिए आपने कोई बैकअप नहीं दिया है। संकलक व्यवहार पर इशारा करना एक बैकअप हो सकता है, लेकिन अगर मैंने स्वतंत्र रूप से पहले सिद्धांतों (कल्पना खुद) से संकलक से दिखाया है कि यह अस्पष्ट नहीं है, मुझे उच्च जमीन मिली है। काश, C ++ कंपाइलर्स में बग हो सकते हैं।
जोहान्स शाउब -

1
मुझे लगता है कि pow(2, N)सी ++ 11 के बाद से यह भी स्पष्ट नहीं है, क्योंकि पैरामीटर के रूप में किसी भी अंकगणितीय प्रकार को प्राप्त करने वाला एक टेम्पलेट फ़ंक्शन है।
अले

28

C ++ में "^" ऑपरेटर एक बिटवाइज़ OR है। यह एक शक्ति को बढ़ाने के लिए काम नहीं करता है। X << n द्विआधारी संख्या की एक बाईं पारी है जो x को 2 n संख्या से गुणा करने के समान है और इसका उपयोग केवल 2 को एक शक्ति में बढ़ाते समय किया जा सकता है। POW फ़ंक्शन एक गणित फ़ंक्शन है जो सामान्य रूप से काम करेगा।


2
विशेष 1 << nरूप से, पावर एन को 2 बढ़ाने के समान है, या 2^n
आशीष आहूजा

1
उन लोगों के लिए जो 1 << n@AshishAhuja टिप्पणी में "1" क्यों नहीं मिला , यह इसलिए है क्योंकि श्रृंखला इस तरह 1 << 0 = 1से जाती है 2^0 = 1; 1 << 1 = 2चूंकि 2^1 = 2; 1 << 2 = 4के बाद से 2^2 = 4 और इतने पर ...
JS5

16

आपको गणित में सामान्य सी विधियों का उपयोग करने में सक्षम होना चाहिए।

#include <cmath>

pow(2,3)

यदि आप यूनिक्स जैसी प्रणाली पर हैं, man cmath

क्या आप यही पूछ रहे हैं?

Sujal



13

जबकि pow( base, exp )एक महान सुझाव है, ध्यान रखें कि यह आम तौर पर फ्लोटिंग प्वाइंट में काम करता है हो सकता है।

यह हो सकता है या नहीं हो सकता है कि आप क्या चाहते हैं: कुछ प्रणालियों पर एक संचयकर्ता पर गुणा करने वाला एक साधारण लूप पूर्णांक प्रकारों के लिए तेज होगा।

और विशेष रूप से वर्ग के लिए, आप अपने आप को संख्याओं को एक साथ गुणा कर सकते हैं, फ्लोटिंग-पॉइंट या पूर्णांक; यह वास्तव में पठनीयता (IMHO) में कमी नहीं है और आप एक फ़ंक्शन कॉल के प्रदर्शन ओवरहेड से बचते हैं।


और हाँ, यह "समय से पहले अनुकूलन" श्रेणी में आ सकता है, लेकिन मुझे हमेशा इस तरह की चीजों के बारे में पता होना अच्छा लगता है - खासकर अगर आपको सीमित-संसाधन वातावरण में कार्यक्रम करना है।
लींडर

11

मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन यदि आप क्यूटी के साथ काम करना पसंद करते हैं, तो उनका अपना संस्करण है।

    #include <QtCore/qmath.h>
    qPow(x, y); // returns x raised to the y power.

या यदि आप qt का उपयोग नहीं कर रहे हैं, तो cmath मूल रूप से एक ही बात है।

    #include <cmath>
    double x = 5, y = 7; //As an example, 5 ^ 7 = 78125
    pow(x, y); //Should return this: 78125

7
#include <iostream>
#include <conio.h>

using namespace 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);
}

// फ़ंक्शन की परिभाषा

double raiseToPow(double x, int power)
{
    double result;
    int i;
    result =1.0;
    for (i=1, i<=power;i++)
    {
        result = result*x;
    }
    return(result);
}

2
आपके उत्तर में आपके कोड की व्याख्या और विवरण होना चाहिए कि यह समस्या को हल कैसे करता है।
AbcAeffchen

conio.h को नॉन स्टैंडर्ड हेडर फ़ाइल में उपयोग नहीं किया जाता है।
हसीब मीर

7

आप के साथ सौदा करना चाहते हैं base_2 उसके बाद ही मैं बाईं पारी ऑपरेटर उपयोग करने की अनुशंसा << के बजाय गणित पुस्तकालय

नमूना कोड :

int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}

नमूना उत्पादन:

1   2   4   8   16  32  64  128  256  512  1024  2048  4096  8192  16384  32768

6

यह pow या powf में है <math.h>

विजुअल बेसिक या पाइथन की तरह कोई विशेष इन्फिक्स ऑपरेटर नहीं है


2
powf () एक C99 फ़ंक्शन है जो C ++ में नहीं है।
नवसंवत्सर

6

कई जवाबों ने सुझाव दिया है pow()या समान विकल्प या उनके स्वयं के कार्यान्वयन। हालांकि, उदाहरण (दिए गए 2^1, 2^2और 2^3अपने प्रश्न में), मुझे लगता है कि क्या आप केवल बढ़ाने की जरूरत है 2एक पूर्णांक सत्ता में। यदि यह मामला है, मैं तुम्हें उपयोग करने के लिए सुझाव है कि 1 << nके लिए 2^n


5
pow(2.0,1.0)
pow(2.0,2.0)
pow(2.0,3.0)

आपका मूल प्रश्न शीर्षक भ्रामक है। बस वर्ग के लिए , का उपयोग करें 2*2


4

ध्यान दें कि दिखाया गया है और इसका उत्तर https://stackoverflow.com/a/2940800/319728pow(x,y) से कम प्रभावी है ।x*x*x

तो अगर आप दक्षता उपयोग के लिए जा रहे हैं x*x*x


2
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

2

मैं पुस्तकालय का उपयोग कर रहा हूं cmathया पुस्तकालय कार्यों math.hका उपयोग करने के लिए करता हूं pow()जो शक्तियों का ख्याल रखता है

#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;

    return 0;
}

2

पहले जोड़ें #include <cmath>फिर आप powउदाहरण के लिए अपने कोड में मेथोड का उपयोग कर सकते हैं :

pow(3.5, 3);

कौन सा 3.5 है आधार और 3 है exp


1

cmath, tgmath या math.h लाइब्रेरी में pow () फ़ंक्शन का उपयोग करें।

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int a,b;
cin >> a >> b;
cout << pow(a,b) << endl; // this calculates a^b

return 0;
}

ध्यान दें कि यदि आप किसी भी डेटा प्रकार को लंबे डबल के अलावा पावर के लिए इनपुट देते हैं, तो उत्तर को डबल का प्रचार किया जाएगा। यही कारण है कि यह इनपुट लेगा और आउटपुट को दोगुना देगा। लंबे डबल इनपुट के लिए रिटर्न टाइप लंबा डबल है। int int का उत्तर बदलने के लिए, int c = (int) pow (a, b)

लेकिन, कुछ संख्याओं का ध्यान रखें, इससे सही उत्तर की तुलना में संख्या कम हो सकती है। इसलिए उदाहरण के लिए आपको 5 ^ 2 की गणना करनी है, फिर कुछ कंपाइलरों पर 24.99999999999 के रूप में उत्तर दिया जा सकता है। उत्तर को अंतर करने के लिए डेटा प्रकार बदलने पर 25 सही उत्तर के बजाय 24 होगा। तो, यह करो

int c=(int)(pow(a,b)+0.5)

अब, आपका उत्तर सही होगा। इसके अलावा, बहुत बड़ी संख्या के लिए डेटा डेटा प्रकार को डबल से लॉन्ग लॉन्ग इंट में बदलने में खो जाता है। उदाहरण के लिए आप लिखते हैं

long long int c=(long long int)(pow(a,b)+0.5);

और इनपुट a = 3 और b = 38 दें तो परिणाम 1350851717672992000 होगा, जबकि सही उत्तर 1350851717672992089 है, ऐसा इसलिए होता है क्योंकि pow () फंक्शन वापसी 1.35085ee / 18 जो कि 1350851717672992000 के रूप में पदोन्नत हो जाता है। मैं सुझाव देता हूं। इस तरह के परिदृश्यों के लिए कस्टम पावर फ़ंक्शन, जैसे: -

long long int __pow (long long int a, long long int b)
{
long long int q=1;
for (long long int i=0;i<=b-1;i++)
{
q=q*a;
}

return q;
}

और जब चाहो तब फोन करना,

int main()
{
long long int a,b;
cin >> a >> b;

long long int c=__pow(a,b);
cout << c << endl;

return 0;
}

लंबी लंबी इंट की सीमा से अधिक संख्या के लिए, या तो बूस्ट लाइब्रेरी या स्ट्रिंग्स का उपयोग करें।


1
नाम वाले __आरक्षित हैं, आपको संभवतः कुछ और चुनना चाहिए।
होलीब्लैकैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.