当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Float.next_float用法及代码示例


本文简要介绍ruby语言中 Float.next_float 的用法。

用法

next_float → float

返回 next-larger 可表示的浮点数。

这些示例显示了每个浮点 f 和相应的 f.next_float 的内部存储值(64 位十六进制):

f = 0.0      # 0x0000000000000000
f.next_float # 0x0000000000000001

f = 0.01     # 0x3f847ae147ae147b
f.next_float # 0x3f847ae147ae147c

在此处的其余示例中,输出以通常的方式显示(结果 to_s ):

0.01.next_float    # => 0.010000000000000002
1.0.next_float     # => 1.0000000000000002
100.0.next_float   # => 100.00000000000001

f = 0.01
(0..3).each_with_index {|i| printf "%2d %-20a %s\n", i, f, f.to_s; f = f.next_float }

输出:

 0 0x1.47ae147ae147bp-7 0.01
 1 0x1.47ae147ae147cp-7 0.010000000000000002
 2 0x1.47ae147ae147dp-7 0.010000000000000004
 3 0x1.47ae147ae147ep-7 0.010000000000000005

f = 0.0; 100.times { f += 0.1 }
f                           # => 9.99999999999998       # should be 10.0 in the ideal world.
10-f                        # => 1.9539925233402755e-14 # the floating point error.
10.0.next_float-10          # => 1.7763568394002505e-15 # 1 ulp (unit in the last place).
(10-f)/(10.0.next_float-10) # => 11.0                   # the error is 11 ulp.
(10-f)/(10*Float::EPSILON)  # => 8.8                    # approximation of the above.
"%a" % 10                   # => "0x1.4p+3"
"%a" % f                    # => "0x1.3fffffffffff5p+3" # the last hex digit is 5.  16 - 5 = 11 ulp.

相关: Float#prev_float

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Float.next_float。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。