【发布时间】:2018-08-13 19:02:34
【问题描述】:
我被分配编写一个程序,该程序以 int 或 float 作为输入,并返回该值的 sin 和 cos,带 6 个小数位。但是当输入是 90 和 180 时,我会得到奇怪的负零,而不是“正”零。
代码:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const double PI = 3.14159265;
int main() {
float x;
cin >> x;
x = x * PI / 180;
cout << fixed;
cout << setprecision(6) << sin(x);
cout << ' ' << setprecision(6) << cos(x) << endl;
}
不需要的输入和输出:
In:90 Out:1.000000 -0.000000
In:180 Out:-0.000000 -1.000000
当输入为 90 但仍输出 -0.000000 时,我尝试通过将 cos 函数的结果乘以 -1 来解决此问题。
解决方案: 正如@harold 和@user2618142 指出的那样,计算的结果是负数,所以近似返回负0。
【问题讨论】:
-
请通过删除固定检查。可能确切的值是负数。
-
是的,抱歉,已经看到并删除了评论。
-
@user2618142 删除
cout << fixed;输出1 -4.37114e-08。 -
所以,这是您对查询的回答。希望这可以澄清!
-
您可以查看stackoverflow.com/a/45795465/4014678 以了解更多关于为什么您得到负零的信息。
标签: c++ trigonometry