[英]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.