C++ 函数不返回小数,有时返回错误的值?
我试图通过使用头文件中定义的函数并将斜率返回到主函数来计算用户输入的斜率 我现在的问题是,有时程序计算的斜率是错误的,即使我的公式是正确的 有时给定的斜率只是向上或向下四舍五入,随机为负。我做错什么了吗 我的主要代码:C++ 函数不返回小数,有时返回错误的值?,c++,floating-point,dev-c++,C++,Floating Point,Dev C++,我试图通过使用头文件中定义的函数并将斜率返回到主函数来计算用户输入的斜率 我现在的问题是,有时程序计算的斜率是错误的,即使我的公式是正确的 有时给定的斜率只是向上或向下四舍五入,随机为负。我做错什么了吗 我的主要代码: #include <iostream> #include "findSlope.h" using namespace std; int main() { float p1, p2, p3, p4, rep, slope; int i; co
#include <iostream>
#include "findSlope.h"
using namespace std;
int main()
{
float p1, p2, p3, p4, rep, slope;
int i;
cout << "input point 1:";
cin >> p1;
cout << "input point 2:";
cin >> p2;
cout << "input point 3:";
cin >> p3;
cout << "input point 4:";
cin >> p4;
cout << "input amount of repetition:";
cin >> rep;
cout << "\nYour points are =" << p1 << "\t"
<< p2 << "\t" << p3 << "\t" << p4;
for ( i=0;i<rep;i++)
{
slope = findSlope(p1,p2,p3,p4,rep);
cout << "Point 1\tPoint2\tSlope\n";
cout << "("<<p1<<","<<p2<<")\t";
cout << "("<<p3<<","<<p4<<")\t";
cout << slope;
}
return 0;
}
#包括
#包括“findSlope.h”
使用名称空间std;
int main()
{
浮动p1、p2、p3、p4、rep、斜率;
int i;
cout>p1;
cout>p2;
cout>p3;
cout>p4;
cout>rep;
CUT< P>原则上,此代码不应该在C++中编译,因为您没有指定<代码> FIDSLope>()/<代码>函数的类型。
如果使用-fppermissive
编译器标志强制编译,则函数将为。从float到int的转换可以解释您描述的奇怪行为(在转换过程中出现溢出时截断和负)
请尝试使用以下命令更正代码:
float findSlope(float p1,float p2,float p3,float p4,float rep)
{
...
}
杂项说明:
<> LI>可以考虑使用<代码>双而不是<代码>浮点。精度更高,与现代CPU的开销不太高。
- 您在
findSlope.h
头中做了两件不应该做的事情:首先,您使用的名称空间会污染包括该头在内的所有文件;其次,您定义了一个函数,这样,如果在不同的编译单元中包含相同的头,则每个.cpp文件都会重新编译该函数,这可能会导致链接器错误手术室
main
要求用户输入一些数字,并将它们传递给findSlope
。后者完全忽略这些参数,要求用户输入更多的数字,并对这些数字执行计算。您的意思是这样的吗?不要在头文件中定义函数。(或).了解和。并阅读编译器警告(如果没有,则启用更多)。您的for
循环计算相同的rep
次数。您是这样说的吗?findSlope
没有返回类型。编译器可能会假定int
,并将float
返回值重新解释为int
。它应该是float findSlope(…){…}
您可能需要澄清您的术语。一个点有两个纵坐标。当您提示用户时,您要求的是4个纵坐标或2个点。
float findSlope(float p1,float p2,float p3,float p4,float rep)
{
...
}