สมมติว่าเรามีคลาส Python ดังต่อไปนี้ (ปัญหามีอยู่ใน Java เช่นเดียวกับequals
และhashCode
)
class Temperature:
def __init__(self, degrees):
self.degrees = degrees
ที่degrees
เป็นอุณหภูมิเคลวินเป็นลอยที่ ตอนนี้ฉันต้องการที่จะใช้การทดสอบความเท่าเทียมกันและ hashing Temperature
ในทางที่
- เปรียบเทียบลอยขึ้นกับความแตกต่าง epsilon แทนการทดสอบความเท่าเทียมกันโดยตรง
- และได้รับเกียรตินิยมสัญญาว่าหมายถึง
a == b
hash(a) == hash(b)
def __eq__(self, other):
return abs(self.degrees - other.degrees) < EPSILON
def __hash__(self):
return # What goes here?
เอกสาร Python พูดถึงตัวเลขการแฮชเล็กน้อยเพื่อให้แน่ใจว่าhash(2) == hash(2.0)
นี่ไม่ใช่ปัญหาเดียวกัน
ฉันยังอยู่ในเส้นทางที่ถูกต้องหรือไม่? และถ้าเป็นเช่นนั้นวิธีมาตรฐานในการใช้การแฮชในสถานการณ์นี้คืออะไร?
ปรับปรุง : ตอนนี้ผมเข้าใจว่าชนิดของการทดสอบความเสมอภาคลอยนี้จะช่วยลดกริยาของและ==
equals
แต่วิธีการที่จะไปพร้อมกับ "ความรู้ทั่วไป" ที่ลอยไม่ควรเปรียบเทียบโดยตรง? หากคุณใช้ตัวดำเนินการความเท่าเทียมกันโดยการเปรียบเทียบลอยเครื่องมือวิเคราะห์แบบคงที่จะบ่น พวกเขาถูกต้องหรือไม่
kelvin
อะไร?