Tuesday, May 28, 2013

Golang: cái lợi khi phải chuyễn kiểu tường minh cho loại số



Lần đầu tiên tối viết một ứng dụng chạy được mà không quá nhỏ trên Go là một ứng dụng xử lý ảnh. Mọi thứ khá phức tạp với Go ở chổ phải làm việc với các loại số, int32 cho ảnh 32bit, int8 (char trong C++) cho ảnh 8bit. Khó khăn là vầy:

var a int32

var b, c int8

a = b + c // báo lỗi khi biên dịch.

Go không cho tự động chuyễn kiểu giữa các loại số, ta phải chuyễn kiểu tường minh, có nghĩa là phải:

a= int32(b) + int32(c)

Cái lúc viết xong chương trình nói trên, phải níu là mệt mỏi với cái kiểu bắt buộc chuyễn kiểu, nhưng dần già mình đã hiểu tại sao Google lại đưa ra hướng thiết kế đó. Cụ thể mấy bửa nay quay về với C++, vẫn là xử lý ảnh.
Ứng dụng này có 1 công đạon cần tính cái BoundingBox (hình chữ nhật bao bên ngoài 1 vật thể nào đó) sau đó xem coi cái box đó có khả năng là hình gần gần vuông không. Đơn giản mình làm theo kiểu:
float r = box.width/box.height
0.9 <= r <= 1.1
Thử với vài hình vuông và hình chử nhật tự vẻ ok, thử luôn trên vài cái hình được, tạm ổn, cho tới hôm nay có 1 cái hình ngang 71 dọc 72, dò hoài không ra cái hình này.
Mò mẫm trong mấy trăm dòng code tới cuối ngày thì hỡi hỡi ôi, r =71/72; r == 0 mà cứ tưởng nó ra 0.98xxxxx.

1 comment:

  1. Skybet Casino | A Member of The Malta Gaming Authority
    Skybet Casino offers a unique gaming experience and the potential for a air jordan 18 retro red to me long-term profit. Sign where to get jordan 18 white royal blue up for air jordan 18 retro racer blue store our how can i find air jordan 18 retro new sportsbook offer and receive air jordan 18 retro varsity red from my site a welcome

    ReplyDelete