เครื่องคิดเลขที่คำนวณบนสหภาพของช่วงที่แยกจากกัน
(victorpoughon.github.io)- รับอินพุตเป็น สหภาพของช่วงที่แยกจากกัน แล้วคำนวณได้ทั้งสี่การดำเนินการพื้นฐาน การเรียกฟังก์ชัน และการยกกำลัง โดยสามารถคำนวณ interval union arithmetic ได้โดยตรงในเบราว์เซอร์
- ช่วงผลลัพธ์จะต้อง ครอบคลุม ค่าที่ได้จากการเลือกค่าจากสหภาพอินพุตแล้วคำนวณนิพจน์เดียวกันบนจำนวนจริงเสมอ และยังรองรับ การหารด้วยช่วงที่มี 0 อยู่ภายใน ในรูปแบบสหภาพที่แยกจากกันได้
- ใน
1 / [-2, 1]จะได้[-∞, -0.5] U [1, +∞]และในtan([pi/3, 2*pi/3])จะได้[-∞, -1.732] U [1.732, +∞]แสดงให้เห็นว่ารองรับทั้ง ผลลัพธ์เป็นช่วงไม่ต่อเนื่อง และ ขอบเขตแบบอนันต์ - รองรับไวยากรณ์และฟังก์ชันที่หลากหลาย เช่น
[a, b],[a, b] U [c, d], ไวยากรณ์ช่วงซ้อนกัน,lo,hi,hull,log10,cos,min,max - ใน โหมดความแม่นยำเต็มรูปแบบ จะคืนช่วงที่ครอบค่าจริงด้วยการปัดออกด้านนอกบนพื้นฐาน IEEE 754 double precision และจุดเด่นคือแสดง
0.1 + 0.2เป็น[0.29999999999999993, 0.3000000000000001]
ภาพรวม
- เป็นเครื่องคิดเลขที่คำนวณกับ สหภาพของช่วงที่แยกจากกัน และรองรับการทำงานของ interval union arithmetic นอกเหนือจากจำนวนจริงทั่วไป
- ช่วง
[a, b]หมายถึงจำนวนทั้งหมดตั้งแต่ a ถึง b และ[a, b] U [c, d]หมายถึงสหภาพของช่วงที่แยกห่างกัน - เป็นส่วนขยายของ interval arithmetic แบบทั่วไป และสามารถคำนวณ การหารด้วยช่วงที่มี 0 อยู่ภายใน โดยยังคงคุณสมบัติการปิดไว้ได้
- ช่วง
- รับประกันคุณสมบัติการครอบคลุม
- หากเลือกจำนวนจริงใด ๆ อย่างละหนึ่งค่าจากสหภาพอินพุต แล้วคำนวณนิพจน์เดียวกันบนจำนวนจริง ผลลัพธ์นั้นจะถูกรวมอยู่ในสหภาพผลลัพธ์เสมอ
- ใช้แสดงความไม่แน่นอนได้
- มีตัวอย่างผลลัพธ์ของ
50 * (10 + [-1, 1])เป็น[450, 550]
- มีตัวอย่างผลลัพธ์ของ
- รองรับการคำนวณนิพจน์ช่วงที่ซับซ้อน
- สามารถป้อนนิพจน์อย่าง
( [5, 10] U [15, 16] ) / [10, 100]โดยใช้ตัวดำเนินการU - มีตัวอย่างผลลัพธ์เป็น
[0.05, 1.6]
- สามารถป้อนนิพจน์อย่าง
- ผลลัพธ์ของการคำนวณอาจเป็นสหภาพที่แยกจากกันได้
1 / [-2, 1]ให้ผลลัพธ์[-∞, -0.5] U [1, +∞]tan([pi/3, 2*pi/3])ให้ผลลัพธ์[-∞, -1.732] U [1.732, +∞]
- ในโหมดความแม่นยำเต็มรูปแบบ สามารถใช้เหมือนเครื่องคิดเลขทั่วไปได้ พร้อมคืนผลลัพธ์แบบช่วงที่ครอบค่าจริงรวมถึง ปัญหาความแม่นยำของเลขทศนิยมลอยตัว
- ยกตัวอย่าง
0.1 + 0.2ให้ผลลัพธ์[0.29999999999999993, 0.3000000000000001]
- ยกตัวอย่าง
ไวยากรณ์
- รองรับรูปแบบพื้นฐาน
- รองรับการเขียนช่วงแบบ
[a, b] - ตัวอย่าง
[0.5, 0.6]
- รองรับการเขียนช่วงแบบ
- รองรับการเขียนสหภาพ
- รองรับรูปแบบ
[a, b] U [c, d] - ตัวอย่าง
[0, 1] U [5, 6]
- รองรับรูปแบบ
- รองรับสี่การดำเนินการพื้นฐานและการยกกำลัง
- การบวก
A + Bตัวอย่าง➤ [90, 100] + [-2, 2]ผลลัพธ์[88, 102] - การลบ
A - Bตัวอย่าง➤ [14, 16] - [8, 12]ผลลัพธ์[2, 8] - การคูณ
A * Bตัวอย่าง➤ [-5, 10] * [2, 4]ผลลัพธ์[-20, 40] - การหาร
A / Bตัวอย่าง➤ [2, 4] / [-1, 2]ผลลัพธ์[-∞, -2] U [1, +∞] - การยกกำลัง
A ^ Bตัวอย่าง➤ [2, 3] ^ [-2, 3]ผลลัพธ์[0.1111, 27]
- การบวก
- รองรับฟังก์ชันและค่าคงที่
- รองรับการเรียกฟังก์ชันในรูปแบบ
function(...) log10([1, 10000])ให้ผลลัพธ์[0, 4]- รองรับการป้อนชื่อค่าคงที่
piให้ผลลัพธ์[3.1415926535897927, 3.1415926535897936]
- รองรับการเรียกฟังก์ชันในรูปแบบ
- ป้อนตัวเลขผสมกับช่วงได้
- สามารถป้อนช่วงด้วยไวยากรณ์วงเล็บเหลี่ยมแบบ
[1, 2] - ตัวเลขอย่าง
3.14จะถูกตีความเป็นช่วงแคบความกว้าง 0 คือ[3.14, 3.14] - ในโหมดความแม่นยำเต็มรูปแบบ จะมีรายละเอียดที่แตกต่างกันในส่วนนี้
1.55 + [-0.002, 0.002]ให้ผลลัพธ์[1.548, 1.552]
- สามารถป้อนช่วงด้วยไวยากรณ์วงเล็บเหลี่ยมแบบ
- รองรับไวยากรณ์ช่วงซ้อนกัน
- สามารถป้อน
[0, [0, 100]]และได้ผลลัพธ์[0, 100] - แม้แต่ตัวเลขด้านในที่ใช้กำหนดขอบเขตช่วงก็จะถูกตีความเป็นช่วงด้วย
- หากมีช่วงอยู่ในตำแหน่งขอบเขตของช่วงซ้อน จะใช้ค่าขอบบนของช่วงนั้น
- การออกแบบนี้ทำให้สามารถใช้เลขคณิตกับตัวขอบเขตเองได้
[0, cos(2*pi)]ให้ผลลัพธ์[0, 1]
- สามารถป้อน
ฟังก์ชันที่รองรับ
- รองรับค่าคงที่
- รองรับ
inf,∞,pi,e [-inf, 0] * [-inf, 0]ให้ผลลัพธ์[0, +∞]
- รองรับ
- รองรับฟังก์ชันดึงขอบเขต
lo(A)คืนค่าขอบล่างlo([1, 2])ให้ผลลัพธ์[1, 1]
hi(A)คืนค่าขอบบนhi([1, 2])ให้ผลลัพธ์[2, 2]
- รองรับการคำนวณเปลือกช่วง
hull(A)จะครอบสหภาพให้เป็นช่วงเดียวhull([1, 2] U [99, 100])ให้ผลลัพธ์[1, 100]
- รองรับฟังก์ชันคณิตศาสตร์พื้นฐาน
abs(A)ตัวอย่างabs([-10, 5])ให้ผลลัพธ์[0, 10]sqrt(A)ตัวอย่างsqrt([9, 49])ให้ผลลัพธ์[3, 7]sqinv(A)ตัวอย่างsqinv([4, 64])ให้ผลลัพธ์[-8, -2] U [2, 8]
- รองรับฟังก์ชันลอการิทึมและเอกซ์โพเนนเชียล
log(A)ตัวอย่างlog([0, 1])ให้ผลลัพธ์[-∞, 0]log2(A)ตัวอย่างlog2([64, 1024])ให้ผลลัพธ์[6, 10]log10(A)ตัวอย่างlog10([0.0001, 1])ให้ผลลัพธ์[-4, 0]exp(A)ตัวอย่างexp([-∞, 0] U [1, 2])ให้ผลลัพธ์[0, 1] U [2.718, 7.389]
- รองรับฟังก์ชันตรีโกณมิติและตรีโกณมิติผกผัน
cos(A)ตัวอย่างcos([pi/3, pi])ให้ผลลัพธ์[-1, 0.5]sin(A)ตัวอย่างsin([pi/6, 5*pi/6])ให้ผลลัพธ์[0.5, 1]tan(A)ตัวอย่างtan([pi/3, 2*pi/3])ให้ผลลัพธ์[-∞, -1.732] U [1.732, +∞]acos(A)ตัวอย่างacos([-1/2, 1/2])ให้ผลลัพธ์[1.047, 2.094]asin(A)ตัวอย่างasin([0, 1])ให้ผลลัพธ์[0, 1.571]atan(A)ตัวอย่างatan([-10, 2])ให้ผลลัพธ์[-1.471, 1.107]
- รองรับฟังก์ชันค่าน้อยสุดและค่ามากสุด
min(A, B)ตัวอย่างmin([1, 2], [0, 6])ให้ผลลัพธ์[0, 2]max(A, B)ตัวอย่างmax([0, 10], [5, 6])ให้ผลลัพธ์[5, 10]
โหมดความแม่นยำเต็มรูปแบบ
- ใช้การปัดออกด้านนอกบนเลขทศนิยมลอยตัวแบบ IEEE 754 double precision
- ใช้ชนิด
numberของ JavaScript - รับประกันว่าช่วงผลลัพธ์จะครอบค่าจริงที่ได้เมื่อคำนวณนิพจน์เดียวกันบนจำนวนจริงด้วยความแม่นยำไม่จำกัดเสมอ
- ใช้ชนิด
- มีตัวอย่างกรณี
0.1 + 0.20.3ไม่สามารถแทนได้อย่างแม่นยำในเลขทศนิยมลอยตัวแบบ double precision- interval arithmetic จะคำนวณช่วงที่ครอบ
0.3ไว้
- การทำงานเมื่อเปิดโหมดความแม่นยำเต็มรูปแบบ
- ตัวเลขที่ผู้ใช้ป้อนจะถูกตีความเป็น ช่วงที่เล็กที่สุด ซึ่งครอบค่า IEEE 754 ที่ใกล้กับเลขฐานสิบที่ป้อนมากที่สุด โดยขอบทั้งสองด้านไม่เท่ากับค่านั้น
- ตัวเลขผลลัพธ์จะแสดงด้วยเลขฐานสิบทุกหลักที่สามารถใช้ได้
- ใช้
Number.toString()
- การทำงานเมื่อปิดโหมดความแม่นยำเต็มรูปแบบ
- ตัวเลขที่ผู้ใช้ป้อนจะถูกตีความเป็น ช่วงเสื่อม ที่มีขอบทั้งสองด้านเท่ากับค่า IEEE 754 ที่ใกล้กับเลขฐานสิบที่ป้อนมากที่สุด
- ตัวเลขผลลัพธ์จะแสดงทศนิยมได้สูงสุด 4 ตำแหน่ง
- ใช้
Number.toPrecision()
บั๊ก
- มีการระบุว่าเครื่องคิดเลขอาจยังมีบั๊กหลงเหลืออยู่
- มีลิงก์ GitHub Issues สำหรับรายงานปัญหา
โอเพนซอร์ส
- ทั้ง Interval Calculator และเอนจินคำนวณ not-so-float เปิดเป็นโอเพนซอร์ส
- มีลิงก์สนับสนุนผ่าน GitHub Sponsors
งานในอนาคต
- มีแผนจะแยกโหมดความแม่นยำเต็มรูปแบบออกเป็นตัวควบคุม 2 รายการ
- การตีความอินพุต
- ความละเอียดของการแสดงผล
- มีแผนเพิ่มตัวแปร
ans- ใช้เก็บผลลัพธ์จากอินพุตก่อนหน้า
- มีแผนเพิ่มตัวดำเนินการหรือฟังก์ชันหาจุดตัด
- มีแผนปรับปรุงความเป็นธรรมชาติของลำดับความสำคัญของตัวดำเนินการ
U - มีแผนรองรับการป้อนสหภาพว่าง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
50 * (10 + [-1, 1]) = [450, 550]อย่างเป็นธรรมชาติ และพอซ้อนเลเยอร์ union เข้าไป ก็สามารถจัดการสิ่งอย่างฟังก์ชันผกผันที่แท้จริงของฟังก์ชันยกกำลังสองได้ด้วย ลองทำsqinv(64)แทนsqrtแล้วจะเห็นภาพ จริง ๆ แล้ว interval calculator นี้ทำขึ้นเพื่อทดสอบ implementation ของ interval union arithmetic ที่กำลังสร้างไว้สำหรับอีกโปรเจ็กต์หนึ่งคือ backwards updating spreadsheet ตัว implementation อยู่ที่ not-so-float และโปรเจ็กต์ที่เกี่ยวข้องมี bidicalc กับ วงสนทนา HNasin(1)แล้วได้เซตทั้งหมด[pi/2, pi/2] + n[2pi, 2pi]โดยไม่ต้องพึ่ง Mathematica คงดีมาก อย่างที่สองคือข้อความอธิบายการตีความตัวเลขที่ผู้ใช้ป้อนค่อนข้างชวนสับสน สำหรับผม ดูเหมือนว่าค่า ขอบเขตผลลัพธ์ ของช่วงที่เล็กที่สุดซึ่งครอบค่าที่ป้อน ควรเป็นเลข IEEE 754 สองค่าที่ใกล้ที่สุดซึ่งประกบค่าที่ป้อนอยู่ แต่ข้อความปัจจุบันอ่านแล้วให้ความรู้สึกเหมือนIEEE754(input)+[-epsilon, epsilon]ซึ่งความหมายต่างออกไป]-∞, -1] U [0.5, +∞[ส่วนช่วงที่ถูกตัดออกตรงกลางจะเป็น]-1, 0.5[เท่าที่ผมเข้าใจ min กับ max ก็น่าจะตีความในลักษณะนี้ด้วย และถ้ามี ไอเดียด้าน UI แบบคลิกหรือแตะสูตรในพื้นที่ผลลัพธ์เพื่อคัดลอกกลับไปช่องป้อน ก็น่าจะสะดวก1 / [-1, 2]ไม่ได้บอกเลยว่าค่าไหนน่าจะเป็นไปได้มากน้อยแค่ไหน และแม้สมมติว่าอินพุตกระจายแบบสม่ำเสมอ เอาต์พุตก็ดูไม่น่าจะเป็น uniform distribution อย่างแน่นอน