ฉันได้เห็นช่วงที่แสดงเป็นตัวเลขและ[first1,last1)
[first2,last2)
ฉันอยากทราบว่าสัญกรณ์ดังกล่าวหมายถึงอะไร
ฉันได้เห็นช่วงที่แสดงเป็นตัวเลขและ[first1,last1)
[first2,last2)
ฉันอยากทราบว่าสัญกรณ์ดังกล่าวหมายถึงอะไร
คำตอบ:
วงเล็บหมายความว่าจุดสิ้นสุดของช่วงนั้นรวมอยู่ด้วยซึ่งรวมถึงองค์ประกอบที่ระบุไว้ วงเล็บหมายความว่าส่วนท้ายเป็นแบบพิเศษและไม่มีองค์ประกอบในรายการ ดังนั้นสำหรับ[first1, last1)
ช่วงเริ่มต้นด้วยfirst1
(และรวมถึงมัน) last1
แต่ปลายก่อน
สมมติว่าจำนวนเต็ม:
[a,b]
รวมถึงจุดสิ้นสุด(a,b)
ไม่รวมไว้ในกรณีของคุณจุดสิ้นสุดที่จุดเริ่มต้นของช่วงเวลาจะรวมอยู่ด้วย แต่จุดสิ้นสุดจะไม่รวมอยู่ด้วย ดังนั้นจึงหมายถึงช่วงเวลา "first1 <= x <last1"
ช่วงครึ่งเปิดมีประโยชน์ในการเขียนโปรแกรมเนื่องจากสอดคล้องกับสำนวนทั่วไปสำหรับการวนซ้ำ:
for (int i = 0; i < n; ++i) { ... }
นี่ฉันอยู่ในช่วง [0, n)
แนวคิดของสัญกรณ์ช่วงเวลาเกิดขึ้นทั้งในคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์ สัญกรณ์คณิตศาสตร์[
, ]
, (
, )
หมายถึงโดเมน (หรือ ช่วง ) ของช่วงเวลา
วงเล็บ[
และ]
วิธีการ:
วงเล็บ(
และ)
วิธีการ:
ช่วงเวลาที่มีสถานะผสมเรียกว่า"half-open" "ครึ่งเปิด"
ตัวอย่างเช่นช่วงของจำนวนเต็มต่อเนื่องตั้งแต่ 1 .. 10 (รวม) จะได้รับการระบุดังนี้:
สังเกตว่าคำinclusive
นั้นถูกใช้อย่างไร หากเราต้องการยกเว้นจุดสิ้นสุด แต่ "ครอบคลุม" ช่วงเดียวกันเราจำเป็นต้องย้ายจุดสิ้นสุด:
สำหรับขอบทั้งซ้ายและขวาของช่วงเวลามีการเรียงสับเปลี่ยน 4 แบบ:
(1,10) = 2,3,4,5,6,7,8,9 Set has 8 elements
(1,10] = 2,3,4,5,6,7,8,9,10 Set has 9 elements
[1,10) = 1,2,3,4,5,6,7,8,9 Set has 9 elements
[1,10] = 1,2,3,4,5,6,7,8,9,10 Set has 10 elements
สิ่งนี้เกี่ยวข้องกับคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์อย่างไร?
ดัชนีอาร์เรย์มักจะใช้ค่าชดเชยที่แตกต่างกันขึ้นอยู่กับว่าคุณอยู่ในช่องใด:
ความแตกต่างเหล่านี้สามารถนำไปสู่การที่ลึกซึ้งข้อผิดพลาดรั้วโพสต์ , อาคาปิดโดยหนึ่งข้อบกพร่องเมื่อใช้อัลกอริทึมทางคณิตศาสตร์เช่น for-loops
ถ้าเรามีชุดหรืออาเรย์กล่าวว่าในไม่กี่ช่วงแรก[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
คณิตศาสตร์จะอ้างถึงองค์ประกอบแรกเป็น1st
ที่แน่นอน องค์ประกอบ เช่นการใช้สัญกรณ์ตัวห้อยเพื่อแสดงดัชนี:
ภาษาโปรแกรมบางภาษาในทางตรงกันข้ามจะอ้างถึงองค์ประกอบแรกเป็นองค์ประกอบzero'th
สัมพัทธ์
เนื่องจากดัชนีอาร์เรย์อยู่ในช่วง [0, N-1] ดังนั้นเพื่อความชัดเจนจึงควร "ดี" ที่จะเก็บค่าตัวเลขเดียวกันสำหรับช่วง 0 .. N แทนที่จะเพิ่มสัญญาณรบกวนที่เป็นข้อความเช่น a-1
อคติ
ตัวอย่างเช่นใน C หรือ JavaScript ในการวนซ้ำอาร์เรย์ขององค์ประกอบ N โปรแกรมเมอร์จะเขียนสำนวนทั่วไป i = 0, i < N
ด้วยช่วงเวลา [0, N) แทนที่จะเป็น verbose [0, N-1] เล็กน้อย:
function main() {
var output = "";
var a = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ];
for( var i = 0; i < 10; i++ ) // [0,10)
output += "[" + i + "]: " + a[i] + "\n";
if (typeof window === 'undefined') // Node command line
console.log( output )
else
document.getElementById('output1').innerHTML = output;
}
<html>
<body onload="main();">
<pre id="output1"></pre>
</body>
</html>
นักคณิตศาสตร์เนื่องจากพวกเขาเริ่มนับที่ 1 จะใช้i = 1, i <= N
ระบบการตั้งชื่อแทนแต่ตอนนี้เราจำเป็นต้องแก้ไขการชดเชยอาร์เรย์ในภาษาที่ใช้ศูนย์
เช่น
function main() {
var output = "";
var a = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ];
for( var i = 1; i <= 10; i++ ) // [1,10]
output += "[" + i + "]: " + a[i-1] + "\n";
if (typeof window === 'undefined') // Node command line
console.log( output )
else
document.getElementById( "output2" ).innerHTML = output;
}
<html>
<body onload="main()";>
<pre id="output2"></pre>
</body>
</html>
นอกเหนือจาก :
ในภาษาการเขียนโปรแกรมที่อิงตาม 0 คุณอาจต้องใช้kludgeขององค์ประกอบที่เป็นศูนย์จำลองเพื่อใช้อัลกอริทึมที่อิงตามคณิตศาสตร์ 1 เช่นPython Index Start
สัญกรณ์ช่วงเวลายังมีความสำคัญสำหรับตัวเลขทศนิยมเพื่อหลีกเลี่ยงจุดบกพร่องเล็กน้อย
เมื่อจัดการกับตัวเลขทศนิยมโดยเฉพาะในคอมพิวเตอร์กราฟิก (การแปลงสีเรขาคณิตเชิงคำนวณการค่อยๆเปลี่ยนภาพเคลื่อนไหว / การผสม ฯลฯ ) มักจะใช้ตัวเลขมาตรฐาน นั่นคือตัวเลขระหว่าง 0.0 ถึง 1.0
สิ่งสำคัญคือต้องทราบขอบกรณีหากจุดสิ้นสุดรวมหรือไม่รวม :
ที่ไหน M เป็นบางepsilon เครื่อง นี่คือสาเหตุที่บางครั้งคุณอาจเห็นconst float EPSILON = 1e-#
สำนวนในรหัส C (เช่น1e-6
) สำหรับเลขทศนิยม 32 บิต คำถามนี้EPSILON รับประกันอะไรหรือไม่? มีรายละเอียดเบื้องต้น สำหรับคำตอบที่ครอบคลุมมากขึ้นโปรดดูFLT_EPSILON
และสิ่งที่นักวิทยาศาสตร์คอมพิวเตอร์ทุกคนควรรู้เกี่ยวกับเลขคณิตลอยตัวของ David Goldberg
การใช้งานตัวสร้างตัวเลขสุ่มบางอย่างrandom()
อาจสร้างค่าในช่วง 0.0 .. 0.999 ... แทนที่จะเป็น 0.0 .. 1.0 ที่สะดวกกว่า ความคิดเห็นที่ถูกต้องในรหัสจะบันทึกสิ่งนี้เป็น [0.0,1.0) หรือ [0.0,1.0] ดังนั้นจึงไม่มีความคลุมเครือเกี่ยวกับการใช้งาน
ตัวอย่าง:
random()
สี คุณแปลงค่าทศนิยมสามค่าเป็นค่า 8 บิตที่ไม่ได้ลงชื่อเพื่อสร้างพิกเซล 24 บิตพร้อมช่องสีแดงสีเขียวและสีน้ำเงินตามลำดับ ขึ้นอยู่กับเอาต์พุตช่วงเวลาโดยrandom()
คุณอาจลงท้ายด้วยnear-white
(254,254,254) หรือwhite
(255,255,255) +--------+-----+
|random()|Byte |
|--------|-----|
|0.999...| 254 | <-- error introduced
|1.0 | 255 |
+--------+-----+
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความแม่นยำจุดลอยตัวและความทนทานกับช่วงเวลาดู Christer Ericson ของReal-Time ตรวจสอบการชน , บทที่ 11 ตัวเลขทนทานมาตรา 11.3 แข็งแกร่ง Floating-Point การใช้งาน
อาจเป็นการประชุมทางคณิตศาสตร์ในคำจำกัดความของช่วงเวลาที่วงเล็บเหลี่ยมหมายถึง "รวมสุดขั้ว" และวงเล็บกลม "เอกสิทธิ์เฉพาะบุคคล"
[first, last)
เป็นช่วงครึ่งเปิดตามที่คนอื่นสังเกต ในหนังสือเรียนบางเล่มยังเขียนว่า[first, last>
และมีความหมายเหมือนกันทุกประการมีเพียงไวยากรณ์เท่านั้นที่แตกต่างกัน