Created
September 25, 2022 15:28
-
-
Save tanhit243/fe7a40914a26171c300c65ff06bfd0d4 to your computer and use it in GitHub Desktop.
Floating-point in ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 004 | |
Số trước mình đã giới thiệu về các tìm kiếm nhanh route với rails routes -g | |
Trong tuần này mình xin giới thiệu về BigDecimal ruby. | |
Ví dụ: Nếu ở ngoài đời khi được hỏi kết quả của phép toán 0.1 + 0.2 có bằng 0.3 không thì câu trả lời luôn là có quá ez. Nhưng với máy tính thì không. Hãy bật rails c lên và thử phép toán thì kết quả trả về là false | |
``` | |
irb(main):013:0> 0.1 + 0.2 | |
=> 0.30000000000000004 | |
irb(main):014:0> 0.1 + 0.2 == 0.3 | |
=> false | |
irb(main):015:0> | |
``` | |
Đó là do vấn đề Floating-point cách lưu trữ trong phần cứng. | |
Để giải quyết vấn đề này mọi người có thể sử dụng BigDecimal của ruby nếu cần thiết nhé. | |
``` | |
irb(main):016:0> BigDecimal('0.1') + BigDecimal('0.2') | |
=> 0.3e0 | |
irb(main):017:0> BigDecimal('0.1') + BigDecimal('0.2') == 0.3 | |
=> true | |
irb(main):018:0> | |
``` | |
[FYI] | |
https://stackoverflow.com/questions/588004/is-floating-point-math-broken | |
https://viblo.asia/p/floating-point-error-va-cach-giai-quyet-trong-ruby-on-rails-XL6lADyNZek |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment