C++中的三角函数不会返回正确的值

mfpqipee  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(226)
cout << sinf(M_PI) << ", " << cosf(M_PI/2);

返回-8.74228e-08, -4.37114e-08
处理这个问题最聪明的方法是什么?
我已经发现,PI舍入到的小数位数越少,函数返回的结果就越接近正确值。

float pi = 3.14;
    cout << sinf(pi) << ", " << cosf(pi/2);

退货:

0.00159255, 0.000796274

但是有没有一种方法可以最大限度地提高准确性,而不消除小数位?

kr98yfug

kr98yfug1#

数字8.74228e-08小于百万分之一;这是一个比0.00159255小得多的数。2单精度浮点数只能给予你7个有效数字的精度,所以就32位浮点数而言,这基本上是零。
通常,浮点数的值可能与您根据所执行的计算所期望的值不完全相同。与某些数学运算的真实结果相比,浮点计算存在少量误差的情况并不罕见。除了精度误差之外,某些数字(即使具有不重复的小数展开)根本无法用浮点数准确表示。π显然不能用十进制的形式来开始。
如果要显示浮点数,但不希望在输出中使用科学记数法,请使用std::setprecision。使用浮点数时,切勿测试它们是否与精确值相等。测试它们与精确值之差的绝对值是否小于公差(通常称为epsilon)。

相关问题