标签: floating-point

在Python中比较浮点数几乎相等的最佳方法是什么?

众所周知,由于舍入和精度问题,比较浮点数是否相等.

例如:https: //randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

在Python中处理这个问题的推荐方法是什么?

当然,这个地方有一个标准的库函数吗?

python floating-point

291
推荐指数
10
解决办法
19万
查看次数

JavaScript将float显示为2位小数

我想显示一个2位小数的数字.

我以为我可以toPrecision(2)在JavaScript中使用.

但是,如果数字是0.05,我得到0.0500.我宁愿保持不变.

JSbin上看到它.

做这个的最好方式是什么?

我可以考虑编写一些解决方案,但我想(我希望)内置这样的东西?

javascript floating-point precision

288
推荐指数
9
解决办法
30万
查看次数

为什么有些浮点数<整数比较慢四倍?

将浮点数与整数进行比较时,某些值对的评估时间比其他类似值的值要长得多.

例如:

>>> import timeit
>>> timeit.timeit("562949953420000.7 < 562949953421000") # run 1 million times
0.5387085462592742
Run Code Online (Sandbox Code Playgroud)

但是如果浮点数或整数变小或变大一定量,则比较运行得更快:

>>> timeit.timeit("562949953420000.7 < 562949953422000") # integer increased by 1000
0.1481498428446173
>>> timeit.timeit("562949953423001.8 < 562949953421000") # float increased by 3001.1
0.1459577925548956
Run Code Online (Sandbox Code Playgroud)

更改比较运算符(例如,使用==>替代)不会以任何明显的方式影响时间.

这并不仅仅与幅度有关,因为选择更大或更小的值可以导致更快的比较,因此我怀疑它是由于位排列的一些不幸的方式.

显然,对于大多数用例来说,比较这些值的速度要快得多.我只是好奇为什么Python似乎更多地使用一些值而不是其他值.

python floating-point performance cpython python-internals

283
推荐指数
1
解决办法
1万
查看次数

为什么十进制数不能用二进制表示?

关于浮点表示,已经向SO发布了几个问题.例如,十进制数0.1没有精确的二进制表示,因此使用==运算符将其与另一个浮点数进行比较是危险的.我理解浮点表示的原理.

我不明白的是,从数学的角度来看,为什么小数点右边的数字比左边的数字更"特殊"?

例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分始终是精确的.但数字6.10并不准确.我所做的只是将十进制移动到一个地方,然后我突然从Exactopia转到了Inexactville.在数学上,两个数字之间应该没有内在差异 - 它们只是数字.

相比之下,如果我将小数位移到另一个方向以产生数字610,我仍然在Exactopia中.我可以继续向那个方向前进(6100,610000000,610000000000000),它们仍然是精确,准确,准确的.但是一旦小数越过某个阈值,数字就不再精确了.

这是怎么回事?

编辑:为了澄清,我想远离关于行业标准表示的讨论,例如IEEE,并坚持我认为是数学上"纯粹"的方式.在基数10中,位置值为:

... 1000  100   10    1   1/10  1/100 ...
Run Code Online (Sandbox Code Playgroud)

在二进制文件中,它们将是:

... 8    4    2    1    1/2  1/4  1/8 ...
Run Code Online (Sandbox Code Playgroud)

对这些数字也没有任何限制.位置无限增加到左侧和右侧.

math floating-point

275
推荐指数
8
解决办法
9万
查看次数

ActiveRecord中的Float vs Decimal

有时,Activerecord数据类型让我感到困惑.呃,经常.对于特定情况,我的一个永恒问题是:

我应该使用:decimal:float

我经常遇到这个链接,ActiveRecord :: decimal vs:float?,但答案不够清楚,我无法确定:

我见过许多线程,人们建议不要使用浮点数并始终使用小数.我也看到一些人建议只使用浮动用于科学应用.

以下是一些示例案例:

  • 地理位置/纬度/经度:-45.756688,120.5777777,...
  • 比/百分比:0.9,1.25,1.333,1.4143,...

:decimal过去曾经使用过,但是我发现与BigDecimal浮点数相比,处理Ruby中的对象是不必要的尴尬.例如,我也知道我可以:integer用来代表金钱/美分,但它并不适合其他情况,例如精确度随时间变化的数量.

  • 使用每个的优点/缺点是什么?
  • 知道使用哪种类型会有什么好的经验法则?

floating-point types ruby-on-rails decimal rails-activerecord

274
推荐指数
3
解决办法
12万
查看次数

Double vs. BigDecimal?

我必须计算一些浮点变量,我的同事建议我使用BigDecimal而不是double因为它会更精确.但我想知道它是什么以及如何最大限度地利用它BigDecimal

java floating-point double bigdecimal

272
推荐指数
6
解决办法
28万
查看次数

为什么这些数字不相等?

以下代码显然是错误的.有什么问题?

i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15")
## i does not equal 0.15
Run Code Online (Sandbox Code Playgroud)

floating-point r floating-accuracy r-faq

263
推荐指数
4
解决办法
4万
查看次数

随机浮点数生成

如何在C++中生成随机浮点数?

我以为我可以把整数兰特除以某种东西,这足够了吗?

c++ random floating-point

260
推荐指数
7
解决办法
37万
查看次数

什么时候应该使用double而不是decimal?

我可以说使用double(或float)代替以下三个优点decimal:

  1. 使用较少的内存.
  2. 更快,因为处理器本身支持浮点数学运算.
  3. 可以代表更大范围的数字.

但这些优势似乎只适用于计算密集型操作,例如建模软件中的操作.当然,在需要精确度时,不应使用双精度数,例如财务计算.那么有没有任何实际的理由选择double(或float)而不是decimal"正常"的应用程序?

编辑补充:感谢所有伟大的回应,我向他们学习.

还有一个问题:一些人认为双打可以更精确地代表实数.宣布时,我认为他们通常也会更准确地代表他们.但是,当执行浮点运算时,准确度是否会降低(有时是显着的)是真实的说法吗?

c# floating-point double types decimal

257
推荐指数
5
解决办法
5万
查看次数

我什么时候应该在java中使用"strictfp"关键字?

我已经查明了它的作用,但是有没有人真的有一个例子,你何时会strictfp在Java中使用关键字?有没有人真的找到了这个用途?

将它放在我的所有浮点运算上是否会产生任何副作用?

java floating-point strictfp

250
推荐指数
6
解决办法
8万
查看次数