Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pow在c+中未按预期工作+; 我现在用C++工作了相当长的一段时间,这是困扰我的问题。p>_C++_Casting_Integer_Pow_Truncation - Fatal编程技术网

Pow在c+中未按预期工作+; 我现在用C++工作了相当长的一段时间,这是困扰我的问题。p>

Pow在c+中未按预期工作+; 我现在用C++工作了相当长的一段时间,这是困扰我的问题。p>,c++,casting,integer,pow,truncation,C++,Casting,Integer,Pow,Truncation,我试图评估pow(2,30),但答案是1.07374e+009, 而不是预期的整数形式1073741824。我试着将其转换为int或 长,但问题是,它有时会将其截断为较低的值。对于 例如,1073741824有时会被截断为1073741823。我该怎么办?此外,如果数字不是2,如何确保得到正确格式的答案 如果您确定总是计算2的幂。如果使用左移位运算符会更好,因为它比pow()函数效率更高。看看这个片段。它很有魅力 #include <iostream> int main() {

我试图评估pow(2,30),但答案是1.07374e+009, 而不是预期的整数形式1073741824。我试着将其转换为int或 长,但问题是,它有时会将其截断为较低的值。对于
例如,1073741824有时会被截断为1073741823。我该怎么办?此外,如果数字不是2,如何确保得到正确格式的答案

如果您确定总是计算2的幂。如果使用左移位运算符会更好,因为它比pow()函数效率更高。看看这个片段。它很有魅力

#include <iostream>

int main()
{
    long pow_value = (1L << 30); //Equivalent to calculating 2^30
    printf("%ld",pow_value);

    return 0;
}
#包括
int main()
{

长功率值=(1L
pow()<太长了,读不下去了,但是,代码>只使用浮点号,当你输出一个大的浮点数时,首先是你如何输出它。用你想要的方式定义格式。第二个是由于精度。类似1073741823.9999999的内容。将分数转换为整数lops,而不是执行任何智能舍入。这是正确的想法,但好的答案除了提供替代方案外,还需要解释出错的原因。用户面临的行为是浮点操作的预期结果。用户最好使用替代方案我有一个整数版本来计算幂。顺便说一句,你不需要在
1周围加括号。我知道了,但是如果数字不是2,我该怎么办。到目前为止还没有人给我答案(感谢您的编辑。@PeteBecker此逻辑不仅适用于2,还适用于所有幂二的数字,2^30==4^28=8^27。但是,如果您有任何其他数字,您可以在问题中使用逻辑。)