Saya telah melihat kisaran angka diwakili sebagai [first1,last1)
dan [first2,last2)
.
Saya ingin tahu apa arti notasi tersebut.
Saya telah melihat kisaran angka diwakili sebagai [first1,last1)
dan [first2,last2)
.
Saya ingin tahu apa arti notasi tersebut.
[first, last)
adalah interval setengah terbuka seperti yang telah dicatat orang lain. Dalam beberapa buku teks, ini juga ditulis sebagai[first, last>
dan memiliki arti yang persis sama, hanya sintaks yang berbeda.Jawaban:
Tanda kurung berarti bahwa ujung kisaran termasuk - termasuk elemen yang tercantum. Tanda kurung berarti akhir itu eksklusif dan tidak mengandung elemen yang terdaftar. Jadi untuk
[first1, last1)
, rentang dimulai denganfirst1
(dan memasukkannya), tetapi berakhir tepat sebelumnyalast1
.Dengan asumsi bilangan bulat:
sumber
Itu selang setengah terbuka .
[a,b]
mencakup titik akhir.(a,b)
tidak termasuk mereka.Dalam kasus Anda, titik akhir pada awal interval disertakan, tetapi titik akhir tidak termasuk. Jadi itu berarti interval "first1 <= x <last1".
Interval setengah terbuka berguna dalam pemrograman karena berhubungan dengan idiom umum untuk perulangan:
Di sini saya berada dalam kisaran [0, n).
sumber
Konsep notasi interval yang muncul di kedua Matematika dan Ilmu Komputer. Notasi Matematika
[
,]
,(
,)
menunjukkan domain (atau kisaran ) dari selang.Kurung
[
dan]
sarana:Tanda kurung
(
dan)
berarti:Interval dengan keadaan campuran disebut "setengah terbuka" .
Misalnya, kisaran bilangan bulat berurutan dari 1 .. 10 (inklusif) akan dinotasikan seperti itu:
Perhatikan bagaimana kata
inclusive
itu digunakan. Jika kita ingin mengecualikan titik akhir tetapi "menutupi" rentang yang sama kita perlu memindahkan titik akhir:Untuk kedua tepi kiri dan kanan interval sebenarnya ada 4 permutasi:
Bagaimana ini berhubungan dengan Matematika dan Ilmu Komputer?
Indeks array cenderung menggunakan offset berbeda tergantung pada bidang apa Anda berada:
Perbedaan-perbedaan ini dapat menyebabkan kesalahan posting pagar halus , alias, bug off-by-one ketika menerapkan algoritma matematika seperti for-loop.
Integer
Jika kita memiliki himpunan atau larik, katakanlah beberapa bilangan prima pertama, ahli
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
matematika akan menyebut elemen pertama sebagai elemen1st
absolut . yaitu Menggunakan notasi subskrip untuk menunjukkan indeks:Beberapa bahasa pemrograman, dalam kontradiksi, akan merujuk pada elemen pertama sebagai elemen
zero'th
relatif .Karena indeks array berada dalam kisaran [0, N-1] maka untuk tujuan kejelasan akan "bagus" untuk menjaga nilai numerik yang sama untuk rentang 0 .. N bukannya menambahkan suara tekstual seperti
-1
bias.Misalnya, dalam C atau JavaScript, untuk beralih pada array elemen N, programmer akan menulis idiom umum
i = 0, i < N
dengan interval [0, N) alih-alih sedikit lebih bertele-tele [0, N-1]:Matematikawan, karena mereka mulai menghitung pada 1, alih-alih akan menggunakan
i = 1, i <= N
nomenklatur tetapi sekarang kita perlu mengoreksi offset array dalam bahasa berbasis nol.misalnya
Selain :
Dalam bahasa pemrograman yang berbasis 0 Anda mungkin perlu kludge dari elemen dummy zero'th untuk menggunakan algoritma berbasis 1 Matematika. misalnya Mulai Indeks Python
Floating-Point
Notasi interval juga penting untuk angka floating-point untuk menghindari bug halus.
Ketika berhadapan dengan angka floating-point terutama di Komputer Grafik (konversi warna, geometri komputasi, pelonggaran / pencampuran animasi, dll.) Sering kali nomor yang dinormalisasi digunakan. Artinya, angka antara 0,0 dan 1,0.
Penting untuk mengetahui kasus tepi jika titik akhir inklusif atau eksklusif :
Di mana M adalah beberapa epsilon mesin . Inilah sebabnya mengapa Anda terkadang melihat
const float EPSILON = 1e-#
idiom dalam kode C (seperti1e-6
) untuk angka floating point 32-bit. Pertanyaan SO ini Apakah EPSILON menjamin sesuatu? memiliki beberapa detail awal. Untuk jawaban yang lebih komprehensif lihatFLT_EPSILON
dan Apa yang Harus Diketahui Setiap Ilmuwan Komputer Tentang Aritmatika Floating-PointBeberapa implementasi generator bilangan acak,
random()
dapat menghasilkan nilai dalam kisaran 0,0 .. 0,999 ... alih-alih lebih nyaman 0,0 .. 1,0. Komentar yang tepat dalam kode akan mendokumentasikan ini sebagai [0.0.1.0) atau [0.0.1.0] sehingga tidak ada ambiguitas dalam penggunaannya.Contoh:
random()
warna. Anda mengonversi tiga nilai titik-mengambang ke nilai 8-bit yang tidak ditandatangani untuk menghasilkan piksel 24-bit masing-masing dengan saluran merah, hijau, dan biru. Bergantung pada output interval olehrandom()
Anda dapat berakhir dengannear-white
(254.254.254) atauwhite
(255.255.255).Untuk perincian lebih lanjut tentang presisi dan ketahanan titik mengambang dengan interval, lihat Deteksi Tabrakan Real-Time Christer Ericson , Bab 11 Numerical Robustness , Bagian 11.3 Penggunaan Kuat-Titik Apung .
sumber
Ini bisa menjadi konvensi matematika dalam definisi interval di mana tanda kurung siku berarti "inklusif ekstral" dan kurung bulat "eksklusif ekstrem".
sumber