为什么POW(5,2)成为24

Why does pow(5,2) become 24?

本文关键字:成为 POW 为什么      更新时间:2023-10-16

我正在制作一个简单的计算器,您可以选择一个函数,然后是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()功能将首先将number1number2转换为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进行隐式铸件。这将导致您看到的行为。