Ruby 浮点除法中的不同结果
为什么在下面的每个计算中最后一个数字都不同?它们不应该是一样的吗Ruby 浮点除法中的不同结果,ruby,floating-point,Ruby,Floating Point,为什么在下面的每个计算中最后一个数字都不同?它们不应该是一样的吗 1.0 / 3 # => 0.3333333333333333 10.0 / 3 # => 3.3333333333333335 100.0 / 3 # => 33.333333333333336 浮点数不能精确地表示所有实数,而浮点数运算不能精确地表示真算术运算,这导致了许多令人惊讶的情况 我建议阅读: 您可以使用BigDecimal而不是float来解决大多数问题 require 'bigdecima
1.0 / 3 # => 0.3333333333333333
10.0 / 3 # => 3.3333333333333335
100.0 / 3 # => 33.333333333333336
浮点数不能精确地表示所有实数,而浮点数运算不能精确地表示真算术运算,这导致了许多令人惊讶的情况 我建议阅读: 您可以使用
BigDecimal
而不是float来解决大多数问题
require 'bigdecimal'
BigDecimal.new( '1.0') / 3 #=> 0.333333333333333333
BigDecimal.new( '10.0') / 3 #=> 3.333333333333333333
BigDecimal.new('100.0') / 3 #=> 33.333333333333333333
浮点数不能精确地表示所有实数,而浮点数运算不能精确地表示真算术运算,这导致了许多令人惊讶的情况 我建议阅读: 您可以使用
BigDecimal
而不是float来解决大多数问题
require 'bigdecimal'
BigDecimal.new( '1.0') / 3 #=> 0.333333333333333333
BigDecimal.new( '10.0') / 3 #=> 3.333333333333333333
BigDecimal.new('100.0') / 3 #=> 33.333333333333333333
浮动是不准确的,因此,在Ruby的当前版本中,理性的使用被简化:
1/3r * 10 == 10/3r # => true
浮动是不准确的,因此,在Ruby的当前版本中,理性的使用被简化:
1/3r * 10 == 10/3r # => true
不可以。因为相对浮点精度不能代表每个数字-最后一个数字不同是因为这是受截断效应影响的“部分”。这么多副本(编码是base2,而不是base10)。因为10不是2的幂。否。因为相对浮点精度不能代表每一个数字-最后一个数字不同是因为这是受截断效应影响的“部分”。这么多副本(编码是base2,而不是base10)。因为10不是2的幂。