簡體   English   中英

如何在C ++中使用帶變量的指數?

[英]How do you use an exponent in c++ with a variable?

所以我意識到#include是必要的,並且有一個pow(x,y)在其中x ^ y起作用...但是當我嘗試使用pow(2,(num-1))時,它踢回了一個錯誤...

errorC2668:'pow':對重載函數的歧義調用

我為此的代碼行如下

perfect = (pow(2,(num-1))) * (pow(2,num)-1);

有什么建議嗎?

提前致謝

編輯:

num確實聲明為int。

num確實有一個值,從1開始到UINT_MAX

在方程式中添加了星號

編譯器不知道要調用哪個pow()函數。 此處列出的重載給出以下列表:

      float pow (       float base,       float exponent );
     double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,         int exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );

編譯器不會猜測要使用哪個。 通過強制轉換使其明確。

perfect = (pow(2.,(double)(num-1))) < (pow(2.,(double)num)-1);

那里可能會有一些額外的演員,但它們不會傷害任何東西。

這些是C ++中允許的pow()函數。 問題在於您的代碼將int作為第一個參數,而C ++不知道是將其提升為double還是long double。

     double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,       float exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );

嘗試放入(double)2而不是2

perfect = (pow((double)2,(num-1))) * (pow((double)2,num)-1)

添加缺少的乘法(或所需的乘法),並且在行的結尾應有分號:

perfect = (pow(2,(num-1))) * (pow(2,num)-1) ;

錯誤C2668:'pow':僅在VC ++ 2005中對重載函數的模棱兩可的調用 ,alex.m寫道,

“ pow”(任何重載)將浮點類型數字(單精度,雙精度或長雙精度)作為第一個參數,而不是整數。 這是錯誤的來源,因為編譯器無法猜測您希望長整數轉換的方式。

只需嘗試編寫一個強制轉換表達式,如下所示:

代碼塊

c = pow((double)numberOfScansCompleted,2);

因此,如果嘗試pow((double)2,(num-1)) ,它應該可以工作。


有趣的是,當我將其開頭輸入Google時,出現了“提示對重載函數的模棱兩可的調用”,這是搜索結果的最佳建議。

請記住,您還可以使用移位運算符編寫2的整數次冪:

int perfect = (1<<(num-1)) * ((1<<num) - 1);

或使用ldexp (也包含在<cmath> ):

double perfect = ldexp(1.0, num-1) * (ldexp(1.0, num) - 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM