Làm thế nào để thể hiện sự vô hạn trong Ruby?


Câu trả lời:


187

Nếu bạn sử dụng ruby ​​1.9.2, bạn có thể sử dụng :

>> Float::INFINITY #=> Infinity
>> 3 < Float::INFINITY #=> true

Hoặc bạn có thể tạo hằng số của riêng mình bằng cách sử dụng *:
Tôi đã kiểm tra rằng trong Ruby 1.8.6, 1.8.7 và 1.9.2 bạn có Float.infinite không? .

PositiveInfinity = +1.0/0.0 
=> Infinity

NegativeInfinity = -1.0/0.0 
=> -Infinity

CompleteInfinity = NegativeInfinity..PositiveInfinity
=> -Infinity..Infinity

* Tôi đã xác minh điều này trong Ruby 1.8.6 và 1.9.2


2
Đúng. Tôi đã thử thực hiện so sánh giữa bất kỳ số nguyên và giá trị đó và nó dường như đang hoạt động tốt. Tôi chỉ tự hỏi bây giờ nếu điều này là an toàn!
Amokrane Chentir

1
Có một bài viết hay ở đây mô tả các thuộc tính của Infinity trong Ruby (bao gồm cả Infinity xuất phát từ cách chia cho 0): nithinbekal.com/posts/ruby-infinity - sẽ cho bạn biết liệu nó có an toàn hay không. (Đối với giá trị của nó, IMHO loay hoay với các giá trị Infinity số hầu như không bao giờ an toàn hoặc thực sự cần thiết cho dù bạn đang sử dụng ngôn ngữ lập trình nào, trừ khi bạn đang làm công việc thực tế liên quan đến toán học)
Andrew Faulkner

Điều này thật tuyệt, cảm ơn, tôi tin rằng bạn cũng có thể làm -Float::INFINITYcho vô cực tiêu cực.
Saleh Rastani

97

Không có từ khóa, nhưng 1.9.2 có một hằng số cho việc này:

>> Float::INFINITY #=> Infinity
>> 3 < Float::INFINITY #=> true

+1, tôi đã không nhận ra điều này là trong 1.9.2. Tôi đã cập nhật câu trả lời của mình hướng mọi người đến câu trả lời của bạn nếu đó là phiên bản mà họ đang nhắm mục tiêu.
Matt

6

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/bigdecimal/rdoc/BigDecimal.html#label-Infinity

1.9.3p429 :025 > BigDecimal('Infinity')
 => #<BigDecimal:7f8a6c548140,'Infinity',9(9)>
1.9.3p429 :026 > BigDecimal('-Infinity')
 => #<BigDecimal:7f8a6a0e3728,'-Infinity',9(9)>
1.9.3p429 :027 > 3 < BigDecimal('Infinity')
 => true

1.9.3p429 :028 > BigDecimal::INFINITY
 => #<BigDecimal:7f8a6ad046d8,'Infinity',9(9)>

Hoạt động tốt và, IMHO, có vẻ tốt hơn sau đó Float :: INFINITY
Alexander Gorg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.