gpt4 book ai didi

c++ - 使用 的二次公式中 sqrt() 的意外结果

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:48 24 4
gpt4 key购买 nike

这是我的任务

你的任务是创建一个名为 equation 的类,它的数据成员 a、b 和 c 是系数的二次方程。该类将有另外两个数据成员,即 proot 和 nroot,它们代表方程的正根和负根。假设变量 a、b 和 c 是整数。 proot 和 nroot 在哪里是花车。- 使用 nullary 构造函数构造类对象。- 然后设计一个友元函数来确定方程的根和根。- 创建另一个友元函数,它将显示 proot 和 nroot 的值。

我有几个问题

  • 我试图将“a”声明为一个整数并取其平方根,但它给出了一个错误,指出“多个 sqrt 实例与参数列表匹配”。当我将“a”声明为 double 类型并将其类型转换为整数时,同样的事情起作用了。为什么会这样?

  • 输出应该是-1-1.5但我的输出完全不同。我做错了什么?

  • 我的教授告诉我,要使函数成为类的友元,我们必须在类中编写它的原型(prototype)。原型(prototype)不包含“&”,但如果我不编写它,程序将无法运行

在此输入验证码

#include <iostream>
#include <math.h>
using namespace std;
class Equation
{
friend void Roots (Equation & );
friend void Display (Equation &);
int a;
int b;
int c;
float proot;
float nroot;
public:
Equation ()
{
a=0;
b=0;
c=0;
proot=0;
nroot=0;
}
Equation (int _a, int _b, int _c)
{
a=_a;
b=_b;
c=_c;
}

};
void Roots (Equation &obj1)
{
double a;
int determinant;
a=(obj1.b^2)-(4*obj1.a * obj1.c);
if (a>-1)
determinant=int(sqrt(a));
else
{
cout<<"Determinant returns an imaginary number; solution not possible\n";
exit (0);
}
obj1.proot= (-obj1.b + determinant)/2*obj1.a;
obj1.nroot= (-obj1.b - determinant)/2*obj1.a;
}
void Display (Equation &obj1)
{
cout<<"Value of positive root : "<<obj1.proot<<endl;
cout<<"Value of negative root : "<<obj1.nroot<<endl;
}
void main ()
{
int a,b,c;
cout<<"Calculate Quadratic Equation"<<endl<<"Enter A : ";
cin>>a;
cout<<"Enter B : ";
cin>>b;
cout<<"Enter C ";
cin>>c;
Equation obj(a,b,c);
Display (obj);
Display (obj);

}

最佳答案

a=(obj1.b^2)-(4*obj1.a * obj1.c);

C++中的^运算符是按位异或,所以obj1.b^2部分计算obj1.b和位模式 000...10。这绝对不是您想要的。

power function在 C++ 中是 pow,因此您可以通过执行 pow(obj1.b, 2) 来求平方,而且如果您使用的是 C++,最好包含 header 作为 cmath 而不是 math.h

编辑:你也永远不会调用 Roots() 来计算任何东西:

Equation obj(a,b,c);
Display (obj);

在这里,您构建方程并立即尝试显示其结果,而无需先调用 Roots(obj)。这至少会计算出一个答案,但仍然是错误的,因为您的计算似乎有误。

您还需要在计算中将 2 * obj1.a 括起来。尝试使用和不使用它们,看看有什么不同!

Calculate Quadratic Equation
Enter A : 10
Enter B : 10
Enter C 2
Value of positive root : -0.276393
Value of negative root : -0.723607

还有这个is correct .尽管您显然期望这两个根具有不同的符号,但事实并非如此。

关于c++ - 使用 <math.h> 的二次公式中 sqrt() 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com