Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 浮点除法中的不同结果_Ruby_Floating Point - Fatal编程技术网

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的幂。