F#(和.NET)中的浮点精度
在“”中,Jon Harrop说: 粗略地说,int类型的值近似于实数 最小整数和最大整数之间的数字,恒定绝对误差为+-1/2 而float类型的值具有近似恒定的相对误差 是百分之一的一小部分 现在,这是什么意思?Int类型不准确F#(和.NET)中的浮点精度,f#,floating-point,F#,Floating Point,在“”中,Jon Harrop说: 粗略地说,int类型的值近似于实数 最小整数和最大整数之间的数字,恒定绝对误差为+-1/2 而float类型的值具有近似恒定的相对误差 是百分之一的一小部分 现在,这是什么意思?Int类型不准确 为什么C#for(1-0.9)返回0.1,而F#返回0.09999988?C#是否更准确,更适合科学计算 我们应该使用十进制值而不是双精度/浮点值进行科学计算吗 不,F#和C#使用相同的双精度类型。浮点几乎总是不精确的。整数是精确的 更新: 你看到差异的原因是数字的打
你看到差异的原因是数字的打印,而不是实际的表示。第一点,我想说的是,
int
可以用来表示整数范围内的任何实数,最大误差为[-0,5,0.5]。这是有道理的。例如,pi可以用整数值3表示,误差小于0.15
浮点数不共享此属性;它们的最大绝对误差与您试图表示的值无关。3-这取决于计算:有时float是一个不错的选择,有时可以使用int。但是,当您对float和decimal中的任何一个都缺乏精度时,会有一些任务 反对使用int的原因:
> 1/2;;
val it : int = 0
> decimal 1E-100;;
val it : decimal = 0M
反对使用float(在C#中也称为double)的原因如下:
反对BCL十进制的原因:
> 1/2;;
val it : int = 0
> decimal 1E-100;;
val it : decimal = 0M
列出的每种类型都有自己的缺点
MSDN声明它是System.Double: