Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 用小数精确计算?_Math_F# - Fatal编程技术网

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
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))
的准确值。不需要四舍五入


有关更多详细信息,请参阅。

您的计算被关闭,不是因为舍入错误,而是因为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))
的准确值。不需要四舍五入


有关更多详细信息,请参阅。

因此该问题存在一些问题

  • 正如其他人指出的,22/7只是PI的近似值
  • 同样,
    让pi=double(22/7)
    产生
    pi=3.0
    。这是因为22/7是F#中的整数除法
  • 与wolfram相比,该表达式使用了比3.0更好的PI近似值,这意味着F#结果与wolfram的差异相当显著
  • 当要求Wolfram和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只是PI的近似值
  • 同样,
    让pi=double(22/7)
    产生
    pi=3.0
    。这是因为22/7是F#中的整数除法
  • 与wolfram相比,该表达式使用了比3.0更好的PI近似值,这意味着F#结果与wolfram的差异相当显著
  • 当要求Wolfram和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的好近似值。