double to_radians(double theta)
{
return (M_PI * theta)/180.0;
}
int main()
{
std::vector<std::pair<double, double>> points;
for (double theta = 0.0; theta <= 360.0; theta += 30.0)
{
points.push_back(std::make_pair(std::cos(to_radians(theta)), std::sin(to_radians(theta))));
}
for (auto point : points)
std::cout << point.first << " " << point.second << "\n";
}
輸出我希望
1 0 0.866025 0.5 0.5 0.866025 0 1 -0.5 0.866025 -0.866025 0.5 -1 0 -0.866025 -0.5 -0.5 -0.866025 0 -1 0.5 -0.866025 0.866025 -0.5 1 0
輸出我得到:
1 0 0.866025 0.5 0.5 0.866025 6.12303e-17 1 -0.5 0.866025 -0.866025 0.5 -1 1.22461e-16 -0.866025 -0.5 -0.5 -0.866025 -1.83691e-16 -1 0.5 -0.866025 0.866025 -0.5 1 -2.44921e-16
正如你可以看到我得到這些奇怪的值而不是零。有人可以解釋爲什麼會發生這種情況嗎?
我認爲你的數據是正確的,'6.12303e-17'本質上是'0'。 (這是 - 十七次方的6倍,即0.000000000000000006) – BWG
除了提供的答案,[this](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg。 HTML)是一個有用的閱讀。 – Pradhan
您可能想要檢查您的平臺是否提供(作爲超出當前C++標準的擴展)函數'sinpi()'和'cospi()'。如果是這樣,你應該通過調用'sinpi(theta/180.0)'和'cospi(theta/180.0)'得到更準確的結果。 [CRlibm](http://lipforge.ens-lyon.fr/www/crlibm/)是一個提供這些功能的庫。 – njuffa