Skip to main content

Posts

Showing posts with the label float

[Go] Đôi khi 0.1 + 0.1 + 0.1 == 0.3

Trong cuộc sống, những thứ đúng là đúng, sai là sai thật dễ dàng, còn những thứ đôi khi thế này, đôi khi thế nọ, thì tùy. Như các học viên của https://pymi.vn đều biết vì sao 0.1 + 0.1 + 0.1 != 0.3 trong Python và hầu hết các ngôn ngữ khác, thì với Go, thực hiện 1 phép tính cộng đơn giản theo 2 cách khác nhau, cho ra 2 kết quả khác nhau. Cách giống các ngôn ngữ khác func main() { x := 0.1 fmt.Printf("%v + %v + %v == 0.3? %t\n", x, x, x, x+x+x == 0.3) fmt.Printf("%f\n", x+x+x) fmt.Printf("%.17f\n", x+x+x) } Kết quả giống như Python và các ngôn ngữ khác, 0.1 + 0.1 + 0.1 != 0.3 do kết quả vế trái là 0.30000000000000004 0.1 + 0.1 + 0.1 == 0.3? false 0.300000 0.30000000000000004 https://go.dev/play/p/eDe3szlFyi7 Cách của riêng Go Nếu viết khác đi một chút, sử dụng từ khóa const , hay viết trực tiếp mà không gán cho biến x , kết quả lại là đúng: func main() { const x = 0.1 fmt.Printf("%v + %v + %v == 0.3? %t\n", x,...

[Python] fractions - tính toán phân số trên Python

Trong một bài viết gần đây, chúng tôi đã giải thích hiện tượng "kỳ lạ" khi 0.1 + 0.1 + 0.1 KHÔNG BẰNG 0.3 khi sử dụng Python hay nhiều ngôn ngữ lập trình khác (C, Java, PHP, Ruby, Golang ...). Nếu bạn vẫn còn thấy nó chưa hết lạ, bấm vào đây để làm quen . Một giải pháp xử lý vấn đề này là sử dụng thư viện " fractions " có sẵn của Python để tính toán các số hữu tỷ (phân số - rational number). Tập số hữu tỷ được ký hiệu là tập Q khi học ở phổ thông: các tập số Thư viện `` fractions `` có một kiểu dữ liệu tên là Fraction, nó giúp biểu diễn các phân số và thực hiện tính toán trên Python. Fraction có thể nhận nhiều dạng đầu vào khác nhau: - Tử số và mẫu số - String biểu diễn phân số - Một số integer hay float Các đoạn code sử dụng Python 3 với IPython. Ta import thư viện trước: In [3]: from fractions import Fraction as F Đầu vào là tử số và mẫu số: In [4]: F(16, 10) Out[4]: F(8, 5)

Vì sao 0.1 + 0.1 + 0.1 không bằng 0.3?

Nếu có thể trả lời chính xác câu hỏi sau và giải thích tại sao, bạn có thể bỏ qua bài này: 0.1 + 0.1 + 0.1 == 0.3 Trong Python, biểu thức này trả về đúng (True) hay sai (False)? hay nói cách khác, khi gõ biểu diễn trên máy tính vế trái có bằng vế phải không? Có thể sử dụng bất kỳ ngôn ngữ lập trình nào khác: Python, C, Java, Golang, ... kết quả là không đổi. Câu trả lời ngắn gọn: Kết quả trả về là False, hay vế trái không bằng vế phải. Float là gì? Kiểu dữ liệu float là viết tắt của "real floating-point number" - kiểu "số thực dấu chấm động". float là một cách BIỂU DIỄN XẤP XỈ cho một số thực (real number) bằng cách đánh đổi độ chính xác (precision). Các quy tắc / chuẩn để biểu diễn float được mô tả trong tiêu chuẩn quốc tế IEEE 754 Số thực là tập số gồm: các số hữu tỷ (số biểu diễn được ở dạng phân số: VD: 2, 1/3) và các số vô tỷ (số không biểu diễn được ở dạng phân số: VD: căn bậc 2 của 2) Số vô tỷ

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG