Ada*_*dam 14 c++ trigonometry cmath
在C++中,
const double Pi = 3.14159265;
cout << sin(Pi); // displays: 3.58979e-009
Run Code Online (Sandbox Code Playgroud)
它应该显示数字零
我明白这是因为Pi是近似的,但是有没有什么方法可以让Pi硬编码到我的程序中,为sin(Pi)返回0?(可能是一个不同的常数?)
如果你想知道我想要做什么:我将极性转换为矩形,虽然有一些printf()技巧我可以做到打印为"0.00",它仍然不会一直返回正常值(在某些情况下,我得到"-0.00")
需要sin和余弦的线是:
x = r*sin(theta);
y = r*cos(theta);
Run Code Online (Sandbox Code Playgroud)
BTW:我的矩形 - > Polar工作得很好......它只是Polar - > Rectangular
谢谢!
编辑: 我正在寻找一个解决方法,以便我可以打印罪(Pi的一些倍数)作为一个很好的圆数到控制台(理想情况下没有一千个if语句)
Ash*_*ain 28
每个计算机科学家应该知道的关于浮点运算的内容(编辑:在评论中也有联系)是相当硬核的阅读(我不能声称已经阅读了所有内容),但其关键在于:你会从来没有得到完全准确的浮点计算.来自文章:
将无限多个实数压缩成有限数量的比特需要近似表示.
不要让程序依赖于浮点计算的精确结果 - 始终允许公差范围.仅供参考3.58979e-009约为0.0000000036.这完全在你选择的任何合理的公差范围内!
vla*_*adr 15
让我们把这种方式,3.58979e-009是尽可能接近 0作为你的3.14159265价值是真实的皮.从技术上讲,你得到的是你所要求的.:)
现在,如果您只输入9个有效数字(小数点后8位),则指示输出也不再显示,即使用:
cout.precision(8);
cout << sin(Pi);
Run Code Online (Sandbox Code Playgroud)