เอปไซลอนในวิชาคณิตศาสตร์และวิศวกรรม
ในวิชาคณิตศาสตร์และวิศวกรรมโดยทั่วไป:
- โดยทั่วไปแล้วเดลต้าใช้เพื่ออ้างถึงความแตกต่างซึ่งอาจเป็นขนาดใดก็ได้
- โดยทั่วไปเอปไซลอนจะใช้เพื่ออ้างถึงปริมาณเล็กน้อย
และ epsilon ดูเหมือนจะเหมาะสมกว่าในกรณีของคุณ
เอปไซลอนในวิทยาการคอมพิวเตอร์
วิทยาการคอมพิวเตอร์โดยเฉพาะในระยะ epsilon ยังหมายถึงespilon เครื่องซึ่งมาตรการความแตกต่างระหว่างและลอยเล็กที่สุดซึ่งเป็นขนาดใหญ่กว่าอย่างเคร่งครัด1.0f
1.0f
หมายเลขหลังนั้นใช้1.00000011920928955078125f
สำหรับการลอยใน Java และสามารถคำนวณได้ด้วย:
float f = Float.intBitsToFloat(Float.floatToIntBits(1f) + 1);
คำจำกัดความของเครื่อง epsilon นั้นสอดคล้องกับการใช้งานทั่วไปของ epsilon ที่อธิบายไว้ข้างต้น
เปรียบเทียบลอย
โปรดทราบว่าก่อนที่จะเปรียบเทียบการลอยสำหรับ "ความใกล้ชิด" คุณจะต้องมีความคิดเกี่ยวกับขนาดของมัน โฟลว์ที่มีขนาดใหญ่มากและลอยตัวที่ต่างกันมากน่าจะเท่ากัน:
9223372036854775808f == 9223372036854775808f + 1000000000f; //this is true!
และในทางกลับกันอาจมีค่าลอยที่เป็นไปได้มากมาย (และคำสั่งหลายขนาด) ระหว่างสองลอยเล็ก ๆ ซึ่งแตกต่างกันโดยเครื่อง epsilon "เท่านั้น" ในตัวอย่างด้านล่างมีค่าลอยตัวที่มีอยู่ 10,000,000 ค่าระหว่างsmall
และf
แต่ความแตกต่างยังต่ำกว่าเครื่อง epsilon:
float small = Float.MIN_VALUE; // small = 1.4E-45
float f = Float.intBitsToFloat(Float.floatToIntBits(small) + 100000000); // f = 2.3122343E-35
boolean b = (f - small < 0.00000011920928955078125f); //true!
บทความที่เชื่อมโยงอยู่ในคำตอบของ GlenH7 จะทำการตรวจสอบการเปรียบเทียบแบบลอยตัวต่อไปและเสนอวิธีแก้ไขปัญหาต่าง ๆ เพื่อแก้ไขปัญหาเหล่านี้