Questions tagged «precision»

有关编程中数值精度的问题。对于分类精度,请使用标签[precision-recall]。


12
float和double有什么区别?
我已经读过双精度和单精度之间的区别。但是,在大多数情况下,float并且double似乎是可以互换的,即,使用其中一种似乎并不影响结果。真的是这样吗?花车和双打何时可以互换?它们之间有什么区别?


10
JavaScript显示浮点数到小数点后两位
我想显示一个数字到小数点后两位。 我以为可以toPrecision(2)在JavaScript中使用。 但是,如果数字是0.05,我得到0.0500。我希望它保持不变。 在JSbin上看到它。 做这个的最好方式是什么? 我可以考虑编写一些解决方案,但是我想(我希望)内置类似的东西吗?

3
如何解释数据库中数字的精度和小数位数?
我在数据库中指定了以下列:decimal(5,2) 如何解释这一点? 根据在SQL Server Management Studio中查看的列上的属性,我可以看到它的意思是:十进制(数字精度,数字小数位数)。 精度和比例在实际意义上是什么? 将其解释为带有5位数字和两位小数的十进制很容易...即12345.12 附言:我已经能够确定同事的正确答案,但是很难在网上找到答案。因此,我想在这里将问题和答案记录在stackoverflow上,以备将来参考。


6
为什么浮点数不正确?
为什么有些数字存储为浮点数时会失去准确性? 例如,十进制数9.2可以精确地表示为两个十进制整数(92/10)之比,两个整数都可以精确地表示为二进制(0b1011100/0b1010)。但是,存储为浮点数的相同比率永远不会完全等于9.2: 32-bit "single precision" float: 9.19999980926513671875 64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875 这样一个看似简单的数字怎么会“太大”而无法在64位内存中表达呢?


3
为什么通过字符串进行往返转换对double而言不安全?
最近,我不得不将一个double序列化为文本,然后将其取回。该值似乎不相等: double d1 = 0.84551240822557006; string s = d1.ToString("R"); double d2 = double.Parse(s); bool s1 = d1 == d2; // -> s1 is False 但是根据MSDN:“标准数字格式字符串”,“ R”选项应该可以保证往返安全性。 往返(“ R”)格式说明符用于确保将转换为字符串的数值重新解析为相同的数值 为什么会这样呢?
185 c#  double  tostring  precision 

11
单精度和双精度浮点运算之间有什么区别?
单精度浮点运算和双精度浮点运算之间有什么区别? 我对与视频游戏机相关的实用术语特别感兴趣。例如,Nintendo 64是否具有64位处理器,如果可以,这是否意味着它能够进行双精度浮点运算?PS3和Xbox 360可以执行双精度浮点运算还是仅执行单精度运算?通常使用双精度功能吗(如果存在的话)?

10
C#中的浮点数学是否一致?是真的吗?
不,这不是另一个“为什么(1 / 3.0)* 3!= 1”问题。 最近,我一直在阅读有关浮点的文章;具体而言,相同的计算如何在不同的体系结构或优化设置上产生不同的结果。 对于存储重放或对等网络(而不是服务器-客户端)的视频游戏来说,这是一个问题,它们依赖于所有客户端在每次运行程序时都产生完全相同的结果-一个小小的差异浮点计算可能导致不同机器(甚至同一台机器上!)的游戏状态发生极大的变化。 即使在“遵循” IEEE-754的处理器之间也会发生这种情况,主要是因为某些处理器(即x86)使用双精度扩展精度。也就是说,它们使用80位寄存器进行所有计算,然后将其截断为64位或32位,从而导致舍入结果与使用64位或32位计算的机器不同。 我在线上已经看到了针对此问题的几种解决方案,但是所有解决方案都是针对C ++而不是C#: double使用_controlfp_s(Windows),_FPU_SETCW(Linux?)或fpsetprec(BSD)禁用双精度扩展模式(以便所有计算均使用IEEE-754 64位)。 始终以相同的优化设置运行相同的编译器,并要求所有用户具有相同的CPU架构(禁止跨平台使用)。因为我的“编译器”实际上是JIT,所以每次运行程序时它的优化方式都可能不同,所以我认为这是不可能的。 使用定点算法,float并double完全避免。decimal可以用于此目的,但是会慢很多,并且没有System.Math库函数支持它。 那么,这甚至在C#中是一个问题吗? 如果我仅打算支持Windows(不支持Mono)怎么办? 如果是,是否有任何方法可以强制我的程序以正常的双精度运行? 如果没有,是否有任何库可以帮助保持浮点计算的一致性?

3
为什么多次添加0.1仍然无损?
我知道0.1十进制数不能用有限的二进制数精确地表示(解释),因此double n = 0.1将失去一些精度,并且将不精确0.1。另一方面,0.5因为它确实可以表示0.5 = 1/2 = 0.1b。 话虽如此,将0.1 三遍相加并不完全是可以理解的,0.3因此,以下代码将输出false: double sum = 0, d = 0.1; for (int i = 0; i < 3; i++) sum += d; System.out.println(sum == 0.3); // Prints false, OK 但是,0.1 五次相加会得到确切的结果0.5呢?以下代码显示true: double sum = 0, d = 0.1; for (int i = 0; …

21
用Java保持精度翻倍
public class doublePrecision { public static void main(String[] args) { double total = 0; total += 5.6; total += 5.8; System.out.println(total); } } 上面的代码打印: 11.399999999999 我如何才能仅打印(或将其用作)11.4?


12
在小数点后如何将Dart中的double舍入到给定的精度?
给定一个double,我想将其四舍五入到小数点后的给定精度点,类似于PHP的round()函数。 我在Dart文档中可以找到的最接近的东西是double.toStringAsPrecision(),但这不是我所需要的,因为它包括精度总点中小数点前的数字。 例如,使用toStringAsPrecision(3): 0.123456789 rounds to 0.123 9.123456789 rounds to 9.12 98.123456789 rounds to 98.1 987.123456789 rounds to 987 9876.123456789 rounds to 9.88e+3 随着数量的增加,我相应地失去了小数点后的精度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.