繁体   English   中英

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

[英]Trignometry functions in c++ wont return the right values

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

但是有没有办法在不消除小数位的情况下最大限度地提高准确性呢?

数字 8.74228e-08 小于百万分之一; 这是一个比 0.00159255 小得多的数字。 单精度浮点数只能为您提供大约 7 位有效数字的精度,因此就 32 位浮点数而言,这基本上为零。

通常,您不应期望浮点数具有精确值。 与开始的数字的真实值相比,浮点数有少量误差的情况并不少见(因为有些数字,即使有非重复的十进制扩展,也不能用浮点数精确表示)和pi 显然根本不能以十进制形式精确表示。

如果要在 output 中显示浮点数而不获取科学记数法,请使用std::setprecision setprecision 。 使用浮点数时,切勿测试它们是否与精确值相等。 测试它们与精确值之差的绝对值是否小于公差,通常称为 epsilon。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM