在C++单元测试中返回Division错误地返回为0
Returning Division in C++ Unit Test incorrectly coming back as 0
我正在使用已构建的Visual Studio 2015框架对C++函数进行单元测试。然而,测试失败了,并表示实际值为0。如果我返回(y2 - y1)
,那么我得到的值是99。如果我返回(x2 - x1)
,我得到86400,但如果我返回(y2 - y1) / (x2 - x1)
,我得到零。为什么会这样?我需要对Assert::AreEqual()
做些什么来告诉它处理浮动吗?即使我在浮点中进行除法,然后返回变量,我仍然得到零?
float averageGradient(int x1, int x2) {
//do some maths, the result of which: y1=-39, y2= 60, x1=683675, x2=770075
float m = (y2 - y1) / (x2 - x1);
return (y2 - y1) / (x2 - x1);
}
我称之为以下单元测试:
TEST_METHOD(Average_Gradient) {
int x1 = 683675;
int x2 = x1 + 86400;
float gradient = averageGradient(x1, x2);
float answer = 0.001145833;
Assert::AreEqual(answer, gradient);
}
即使我在浮点中进行除法,然后返回变量,我仍然得到零?
那不是你要做的。
float averageGradient(int x1, int x2) {
//do some maths, the result of which: y1=-39, y2= 60, x1=683675, x2=770075
float m = (y2 - y1) / (x2 - x1);
return (y2 - y1) / (x2 - x1);
}
首先对int
s进行除法运算,并将结果(0)分配给float
。然后你再次对int
进行除法运算并返回。
整数除法的结果只是截断它,并给出一个int作为结果。如果你想得到一个float作为结果,那么在进行除法之前,你必须至少向float
抛出一个参数:
float averageGradient(int x1, int x2) {
//do some maths, the result of which: y1=-39, y2= 60, x1=683675, x2=770075
float m = (y2 - y1) / (float)(x2 - x1);
return m;
}
应该这样做。
此外,你从哪里得到y1
和y2
,因为你不把它们当作论据?这些是全局变量吗?
您应该返回声明为浮点的m
变量,而不是计算。您的返回应该简单地说:return m;
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- glad 导致 glfwSwapBuffers 返回错误消息
- 我的模板类方法返回错误类型?
- 共享内存:MapViewOfFile 返回错误 5
- 使用 std::forward_list 返回错误的队列实现
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- __int64 CString 返回错误的值 - C++ MFC
- C++ OpenGL 中,绘制形状返回错误
- Python os.system() 返回错误值
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- LibClang clang_getArgType() 返回错误的类型
- 除法函数返回错误的值
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 矩阵逆变器返回错误的反转
- openCL-创建子缓冲区返回错误代码13
- Qt SQL LIKE语句返回错误
- GetLastError()从FtpPutFile()返回错误6
- PfCreateInterface返回错误120(未实现)
- 为什么 Pa_GetStreamTime() 返回错误?
- G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误