代码之家  ›  专栏  ›  技术社区  ›  Wajih Benzayed

cmath库中的cos函数工作不正常[重复]

  •  0
  • Wajih Benzayed  · 技术社区  · 6 月前

    我使用的是c++20,cos()不能正常工作(visualstudio)

    #include <cmath>
    #include <numbers>
    //it is supposed to give me 0
    std::cout << cos(std::numbers::pi / 2);
    //it gives 6.12323e-17 instead
    
    1 回复  |  直到 6 月前
        1
  •  5
  •   Eric Postpischil    6 月前

    /2是无理数。所有以浮点格式表示的有限数都是有理数。事实上,它们位于一个更受限制的子集中,其中每个数字的形式都是± M b e ,在哪里 M 是受格式限制的整数, b 是格式的基础,通常为2,有时为10,以及 e 是一个也受格式限制的整数。

    最常用的格式 double 是IEEE-754二进制64。在这种格式中,0 M <2. 53 1074欧元 e ¤ 971.

    在这种格式中,最接近/2的可表示值恰好是1.570796326794896557998173427209258077952880859375(其中 M = 3537118876014220, e = 51). 这就是你应该得到的 std::numbers::pi / 2 ;这是这种格式下最好的结果。

    该数字的余弦约为6.1232310 17 .