Chr*_*oyd 28 ruby python language-agnostic idioms infinity
所以在Ruby中有一个指定无穷大的技巧:
1.0/0
=> Infinity
Run Code Online (Sandbox Code Playgroud)
我相信Python你可以做这样的事情
float('inf')
Run Code Online (Sandbox Code Playgroud)
这些仅仅是一些例子,我确信大多数语言在某种程度上都具有无限性.你什么时候才能在现实世界中使用这个结构?为什么在一个范围内使用它比仅使用布尔表达式更好?例如
(0..1.0/0).include?(number) == (number >= 0) # True for all values of number
=> true
Run Code Online (Sandbox Code Playgroud)
总而言之,我正在寻找的是使用Infinity的现实世界的理由.
编辑:我正在寻找真实世界的代码.当人们真正使用它时,这就是你可以"使用它"的全部和好处.
Tri*_*ych 34
在头部顶部,它在搜索最小值时可用作初始值.
例如:
min = float('inf')
for x in somelist:
if x<min:
min=x
Run Code Online (Sandbox Code Playgroud)
我更喜欢将其min
初始设置为第一个值somelist
当然,在Python中,你应该在大多数情况下使用min()内置函数.
mmc*_*ole 34
Dijkstra的算法通常将无穷大指定为图中的初始边权重.这不有是"无穷大",只是一些随意不变,但在java中我通常使用Double.Infinity.我认为红宝石可以类似地使用.
小智 17
似乎有一个隐含的"为什么这个功能甚至存在?" 在你的问题.原因是Ruby和Python只是允许访问可以按IEEE规定的浮点形式指定的全部值.
这个页面似乎描述得很好:http: //steve.hollasch.net/cgindex/coding/ieeefloat.html
因此,您也可以使用NaN(非数字)值和-0.0,而您可能不会立即使用这些值.
Era*_*rin 11
在某些物理计算中,您可以将相同顺序的不规则(即无限数)相互标准化,将它们两者抵消并允许近似结果通过.
当你处理极限时,可以实现像(无穷大/无穷大) - >接近有限数的计算.语言有能力覆盖常规的被零除错误.
Bkk*_*rad 10
使用Infinity
和-Infinity
实现数学算法时需要它.
在Ruby中,Infinity
并-Infinity
有很好的比较性质,使得-Infinity
< x
< Infinity
任何实数x
.例如,Math.log(0)
返回-Infinity
,扩展到暗示0
的属性.另外,是如果x> 0,如果x <0,并且'的NaN'(非数字;即,未定义)如果x为0.x > y
Math.log(x) > Math.log(y)
Infinity * x
Infinity
-Infinity
例如,我在部分日志似然比的计算中使用了以下代码.-Infinity
即使k
is 0
或n
AND x
是0
或,我明确引用定义一个值1
.
Infinity = 1.0/0.0
def Similarity.log_l(k, n, x)
unless x == 0 or x == 1
k * Math.log(x.to_f) + (n-k) * Math.log(1.0-x)
end
-Infinity
end
end
Run Code Online (Sandbox Code Playgroud)
在Ruby中,infinity可用于实现惰性列表.假设我想要从200开始的N个数字,每次连续增加100个单位:
Inf = 1.0 / 0.0
(200..Inf).step(100).take(N)
Run Code Online (Sandbox Code Playgroud)
更多信息:http://banisterfiend.wordpress.com/2009/10/02/wtf-infinite-ranges-in-ruby/
小智 5
我已经将它用于你想要定义偏好/允许范围的情况.
例如,在37signals应用程序中,您喜欢项目编号的限制
Infinity = 1 / 0.0
FREE = 0..1
BASIC = 0..5
PREMIUM = 0..Infinity
Run Code Online (Sandbox Code Playgroud)
然后你可以做像这样的检查
if PREMIUM.include? current_user.projects.count
# do something
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28012 次 |
最近记录: |