F#用小数精确计算?

jub*_*nna 0 math f#

我正试图用浮点数做精确的计算

let pi = double (22/7)

printfn "%f" (cos(2.00*pi*1.00/2.00))
// output: -0.989992
Run Code Online (Sandbox Code Playgroud)

在计算器上我得到-1,所以它可以正确地向上和向下舍入,但是,当我在F#中执行此操作时,我得到结果/输出:-0.989992接近-1,但是如何获得输出-1所以它正确地向上和向下舍入?

我试着阅读有关该主题的内容,似乎我需要导入一个模块,这是真的吗?

在此输入图像描述

rmu*_*unn 5

你的计算不是因为舍入误差,而是因为22/7是π值的非常宽松的近似值.

  • 22/7 = 3.142857142857 ......
  • π= 3.14159265358979 ......
  • 22/7 - π= 0.00126448927 ......

Wolfram Alpha使用了比22/7更好的π近似值,这就是为什么你的计算显示了Wolfram Alpha的不同结果.

let pi = double (22/7)你应该只使用System.Math.PI(例如let pi = System.Math.PI),而不是做.这将为您提供准确的价值(cos(2.00*pi*1.00/2.00)).不需要四舍五入.

有关详细信息,请参阅文档Math.PI.