Decimal

เรื่องหนึ่งที่โปรแกรมเมอร์มือใหม่มักจะไม่ระวังกันคือ การใช้ค่าเลขทศนิยมในคอมพิวเตอร์นั้นเป็นฐานสอง ซึ่งไม่ตรงตัวกับการใช้เลขทศนิยมในฐานสิบทั่วๆ ไป ในการเขียนโปรแกรมหนึ่งๆ ที่มีการเปรียบเทียบค่าเลขทศนิยมจึงอาจจะดูดีในการทดสอบ เช่นว่า


print (0.05 + 0.05 == 0.1)
True

เมื่อการทำงานในขั้นต้นทำงานดี โปรแกรมเมอร์อาจจะเชื่อว่าส่วนนี้ทำงานถูกต้องดี จนกระทั่งการทำงานในแบบที่คล้ายๆ กันมีการทำซ้ำจำนวนมากๆ เช่น


d1 = 0.0
for i in range(1000):
d1 += 0.0001
print repr(d1)
1.0000000000000007
print (d1 == 1.0)
False

ถึงตอนนี้โปรแกรมก็เริ่มทำงานไม่เป็นไปตามที่เราคิด และโปรแกรมเมอร์จำนวนมากก็เริ่มกุมขมับว่าทำไมมันไม่เวิร์ค ขณะที่โปรแกรมเมอร์อีกกลุ่มหนึ่งที่เข้าใจปัญหานี้ดี ก็ต้องใช้เทคนิคสารพัดเพื่อที่จะแปลงการปัดค่าทศนิยมอย่างนี้ให้ถูกต้อง

ใน Python 2.4 เป็นต้นมา มีการอิมพลีเมนต์เอกสาร PEP-327 ซึ่งเป็นสเปคของเลขทศนิยมฐานสิบ ที่ทำงานในส่วนนี้ได้ถูกต้องกว่า อย่างในตัวอย่างต่อไปนี้


dec1 = Decimal("0.0");
for i in range(1000):
dec1 += Decimal("0.001")
print repr(dec1)
Decimal("1.000")
print (dec1 == Decimal("1.0"))
True

เท่านี้เราก็จะได้การทำงานที่เป็นไปตามคาดโดยไม่ต้องกังวลความไม่แน่นอนของโปรแกรมอีกต่อไป

 

ปลายทาง

ผมประสบความสำเร็จแล้ว ผู้คนรู้จักผมไปทั่ว ผลงานของผมกำลังจะทำให้คนนับล้านมีความเป็นอยู่ที่ดีขึ้น

การประกาศรางวัลเมื่อสัปดาห์ที่แล้ว คือจุดสูงสุดในชีวิตของผม มันเป็นรางวัลที่มีการคัดเลือกกันเพียงปีละคน งานของผมต้องรอการพิสูจน์ถึงห้าปี กว่าคณะกรรมการจะเลือกผม

ผมพักจากงานเป็นครั้งแรกในรอบหลายสิบปี…. เป็นครั้งแรกที่ผมมองไปข้างหน้า เห็นประตูที่อยู่ตรงข้ามโต๊ะทำงาน เพราะที่ผ่านมาผมไม่เคยมองประตูนี้มากไปกว่าลูกบิดที่ผมใช้เข้าออก

ผมเริ่มอยากออกไปฉลองกับใครสักคน ผู้คนทั้งประเทศกำลังยินดีกับรางวัลที่ผมได้รับ มีคนมาเสนอสร้างอนุเสาวรีย์ให้ผมด้วยซ้ำไป

ผมมองออกไป แล้วครุ่นคิด ผมอยากมีใครสักคนร่วมยินดีกับผมในตอนนี้ แต่จะเป็นใครดี

พ่อแม่ผมเสียไปเมื่อหลายปีก่อน น้องผมโทรมาบอกตอนผมกำลังทำงานในศูนย์วิจัยที่ปารีส ผมอยู่ที่่นั่นกว่าห้าปี โดยไม่ได้กลับมางานศพท่านทั้งสอง

ที่จริงโทรศัพท์จากน้องผมที่มาบอกข่าว ก็เป็นเพียงการพูดคุยกับน้องครั้งสุดท้าย

นั่นมันเมื่อใหร่กันนะ…

ผมมีแฟนคนแรกตอนเข้าเรียนปีหนึ่ง และก็เป็นคนสุดท้าย เราคบกันได้ไม่นาน ผมยุ่งเกินไป

ผมบอกตัวเอง ผมต้องหาเพื่อนมาร่วมฉลองด้วยซักคน ผมเปิดสมุดโทรศัพท์

มันเต็มไปด้วยรายชื่อของห้องวิจัยทั่วโลก ไม่มีชื่อใดในสมุดนั้นมีคำนำหน้าชื่อน้อยไปกว่า ดร.

ผมปิดสมุดโทรศัพท์ลง เงยหน้ามองเพดานเป็นครั้งแรกในช่วงเวลาเท่าใหร่ไม่มีใครรู้

ผมถามกับตัวเอง…

นี่ผมประสบความสำเร็จจริงๆ หรือ

 

ตัวเอง

จะมีประโยชน์อะไรที่ กับที่เราเป็นห่วง

จะมีประโยชน์อะไรกับการช่วยเหลือที่ให้ไป

จะมีประโยชน์อะไรกับคำเตือนที่พรั่งพรูออกไป

ตัวของตัวเอง… นะ แค่ตัวของตัวเอง

 

BEST

Being the BEST still doesn’t make us right.

David Betz กล่าวไว้ในหน้า Bugzilla

แปลเป็นไทยง่ายๆ คงเป็นว่าผิดน้อยที่สุดก็ยังไม่ใช่ถูก

ขณะที่เรื่องไม่สำคัญหลายๆ อย่าง เรายอมรับได้กับข้อบกพร่องเล็กๆ น้อยๆ ที่มีอยู่ทั่วไป เราอาจจะพบตั๋วหนังที่พิมพ์ชื่อหนังไม่ครบ เราอาจจะใช้คอมพิวเตอร์ที่คีย์บอร์ดจางไปบางปุ่ม

ของพวกนี้เป็นเรื่องปรกติ และมักจะเป็นเรื่องที่ยอมรับได้โดยไม่มีพิษมีภัยอะไร

พิษภัยของมันคือเมื่อเราชินชากับความผิดเล็กๆ มันทำให้เราคิดว่าทุกเรื่องนั้น มีข้อผิดพลาดไ้ด้เสมอ และเรายอมรับข้อผิดพลาดได้เสมอๆ เช่นกัน

เรื่องจริงคือชีวิตของเรามีหลายๆ อย่างที่เราไม่ควรยอมให้มีความผิดพลาดไม่ว่ากรณีใดๆ

เราคงไม่ยอมให้เลขในบัญชีของเราผิดไปสักหลัก เราคงไม่ยอมให้ชื่อในบัตรประชาชนเราผิดไปสักตัว

แต่เรามักยอมที่จะมีจุดบกพร่องเล็กๆ เช่นการละเลยการเรียน การทำงานบ้างบางวัน เราทำเศษกระดาษตกลงบนพื้นแล้วแกล้งลืมไม่เก็บบ้าง

มาตรฐานการยอมรับได้อยู่ตรงไหน?

มันอยู่ในตัวเรานั่นแหละ…