Math 用小数精确计算?
我试图用浮点数做一个精确的计算,比如Math 用小数精确计算?,math,f#,Math,F#,我试图用浮点数做一个精确的计算,比如 let pi = double (22/7) printfn "%f" (cos(2.00*pi*1.00/2.00)) // output: -0.989992 在计算器上,我得到-1,因此它可以正确地上下取整,然而,当我在F中这样做时,我得到的结果/输出:-0.989992,接近-1,但是我如何得到输出-1,以便它正确地上下取整 我试图阅读有关该主题的内容,但似乎我需要导入一个模块,这是真的吗 对不起,我找到路了!您需要使用System.Math.R
let pi = double (22/7)
printfn "%f" (cos(2.00*pi*1.00/2.00))
// output: -0.989992
在计算器上,我得到-1,因此它可以正确地上下取整,然而,当我在F中这样做时,我得到的结果/输出:-0.989992,接近-1,但是我如何得到输出-1,以便它正确地上下取整
我试图阅读有关该主题的内容,但似乎我需要导入一个模块,这是真的吗
对不起,我找到路了!您需要使用System.Math.Round。无需导入任何内容,因为它已内置
例如:System.Math.Round(System.Math.Round(cos((2.00*pi*2.00/2.00)),0))我找到路了,对不起!您需要使用System.Math.Round。无需导入任何内容,因为它已内置
例如:System.Math.Round(System.Math.Round(cos((2.00*pi*2.00/2.00)),0))您的计算被关闭不是因为舍入误差,而是因为22/7是π值的一个非常松散的近似值
- 22/7=3.142857142857
- π=3.14159265358979
- 22/7-π=0.00126448927
let pi=double(22/7)
,不如使用System.Math.pi
(例如,let pi=System.Math.pi
)。这将获得(cos(2.00*pi*1.00/2.00))
的准确值。不需要四舍五入
有关更多详细信息,请参阅。您的计算被关闭,不是因为舍入错误,而是因为22/7是π值的一个非常松散的近似值
- 22/7=3.142857142857
- π=3.14159265358979
- 22/7-π=0.00126448927
let pi=double(22/7)
,不如使用System.Math.pi
(例如,let pi=System.Math.pi
)。这将获得(cos(2.00*pi*1.00/2.00))
的准确值。不需要四舍五入
有关更多详细信息,请参阅。因此该问题存在一些问题
让pi=double(22/7)
产生pi=3.0
。这是因为22/7是F#中的整数除法cos(3)
结果如下
F:COS3.0
=>-0.989992496600445
Wolfram:cos(3)
=>-0.98999249660044572715727947312613023936790661558832881
Wolfram确实计算了更多的小数,但我们发现数字之间的差异仅为1e-15
当我们问F#和Wolfram他们同意的cos(pi)是什么时:
F:cos System.Math.PI
=>-1.0
Wolfram:
cos(pi)
=>-1
所以这个问题有一些问题
让pi=double(22/7)
产生pi=3.0
。这是因为22/7是F#中的整数除法cos(3)
结果如下
F:COS3.0
=>-0.989992496600445
Wolfram:cos(3)
=>-0.98999249660044572715727947312613023936790661558832881
Wolfram确实计算了更多的小数,但我们发现数字之间的差异仅为1e-15
当我们问F#和Wolfram他们同意的cos(pi)是什么时:
F:cos System.Math.PI
=>-1.0
Wolfram:
cos(pi)
=>-1
实际上主要问题是22/7
等于3
,这不是pi的好近似值。实际上主要问题是22/7
等于3
,这不是pi的好近似值。