在代码中返回3221225725以进行简单的概率运算

时间:2019-01-11 22:06:34

标签: c++

我正在尝试编写一个对概率进行简单操作的代码,但它始终返回相同的值(3221225725)。我重写并更改了几次代码(更改了变量类型,停止使用switch,为x-y创建了变量,等等),但是它始终返回相同的值。有人知道为什么它会继续这样做吗?

#include<iostream>
#include<cmath>
using namespace std;

float z;
float y;
float a = z - y;

int factorial(float x)
{
    if (x == 1)
    {
        return 1;
    }
    else
    {
        return x * factorial(x - 1);
    }
}

int main()
{

    cout << "Insert total number of elements or press 0 to exit" << endl;
    cin >> z;
    cout << "Insert total number of attempts or press 0 to exit" << endl;
    cin >> y;

    if (z > 0 && y > 0)
    {
        return (factorial(z) / (factorial(y)) * (factorial(a)));
    }
    else
    {
        return 0;
    }
}

1 个答案:

答案 0 :(得分:0)

好的,您的代码有几个小问题,但是它们共同带来了很多问题。

这里是一个“有效的”版本,可以解决您的大多数问题,代码中的注释表明您犯了哪些错误:https://coliru.stacked-crooked.com/a/0716e3a1fc7ecafc

您遇到的大问题:

  • 您在初始化“ a”之前使用了“ z”和“ y”中的值,这意味着“ a”包含未初始化的内存,并且您将获得随机结果。
  • 您正在使用“ ==”浮点数进行浮点数的直接比较,并不是完美的表示形式,并且每次数学运算都会引入少量错误。比较浮点数时,几乎总是需要将它们与某个合理的公差(例如.00001之内)进行比较。
  • 您正在使用主函数的“返回”来尝试传递一个值。程序主要功能的返回值是操作系统的标志,指示程序的运行方式。 0表示程序正常运行,其他任何值均表示错误代码。相反,您想将值打印出来。