为什么POW(5,2)成为24
Why does pow(5,2) become 24?
我正在制作一个简单的计算器,您可以选择一个函数,然后是2个输入以获取答案。这是一个整洁的小程序,除了权力外,一切都顺利运行。每个数字都可以正常工作。
,但据此:5^2=24, 5^3=624
。我正在使用pow(number1,number2)
。
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
for(;;){
int func;
int number1;
int number2;
cout << "Input your function (+,-,x,/,Square,Power)(1,2,3,4,5,6) ";
cin >> func;
cout << "input #1: ";
cin >> number1;
cout << "input #2: ";
cin >> number2;
if (func==1){
int answer;
answer = number1 + number2;
cout << number1 << " + " << number2 << " = " << answer << endl;
}
else {
if (func==2){
int answer;
answer = number1 - number2;
cout << number1 << " - " << number2 << " = " << answer << endl;
}
else {
if (func==3){
int answer;
answer = number1 * number2;
cout << number1 << " x " << number2 << " = " << answer << endl;
}
else {
if (func==4){
int answer;
answer = number1 / number2;
int R = number1 % number2;
cout << number1 << " / " << number2<< " = " << answer << " R "<< R << endl;
}
else {
if (func==5){
int answer;
answer = pow(number1,0.5);
cout << "√" << number1 << "=" << answer << endl;
}
else {
if (func==6){
int answer;
answer = pow(number1,number2);
cout << "√" << number1 << "^" << number2 << "=" << answer << endl;
}
}
}
}
}
}
}
}
pow()
将数字作为浮点返回。真正返回的是24.99997或类似的东西。但是,您通过将其分配给整数并将其分配为24来截断它。在这种情况下,可以分配给整数是可以的,因为您知道然后答案始终是一个整数,因此您需要将其围绕它 - 不要截断它。到达整数的正常方法是添加0.5,例如:
int answer;
answer = pow(number1,number2)+0.5;
另一方面,平方根可能不应该分配给整数 - 几乎每个平方根都有小数位。
int answer;
^^^
answer = pow(number1,number2);
pow()
功能将首先将number1
和number2
转换为float
。请注意,浮点计算不是精确的,这意味着您可能会获得一个值24.999999
而不是精确的25
。计算后,它将结果投入到int
,该结果将切断浮动部分(例如24.999999 => 24
)。
尝试使用float
来捕获结果:
float answer;
answer = pow(number1,number2);
如果您想将结果存储到int
中,则应正确地将其围绕:
int answer;
answer = (int) (pow(number1,number2) + 0.5);
要继续阅读,请查看每个程序员对浮点算术的了解。
尝试使用double answer;
。pow
正在返回浮点数,您正在对int
进行隐式铸件。这将导致您看到的行为。
相关文章:
- 在C++中如何在没有pow的情况下进行基础计算
- 理解GCC中的std::pow实现
- 子例程,不使用 pow,并带有参数和返回
- 整数溢出,最大值为 pow(10,19)
- 在 while 循环中使用 pow() 函数 C++
- 提升库,使其成为C++标准
- 使第二个类的构造函数成为第一个类中的友元函数
- 如果我注释掉换行符,为什么'string'会成为一个不合格的变量
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 在C++不使用 POW 的情况下处理负指数
- 实现使用模板化类而不使原始类成为模板的类
- C++定义构造函数使对象成为非 POD
- 何时使函数成为类成员函数C++?
- C++ 中 pow() 函数的输出没有给出准确的答案
- 为什么使操作员成为新的专用会打破 std::shared_ptr?
- 对使用 CMake 生成为 lib .a 的方法的未定义引用
- 如何使模板化类成为另一个模板化类的好友
- 没有匹配'pow'功能
- 如何使用 cin 使 c++ 成为可选?
- 为什么POW(5,2)成为24