Я бачив діапазони чисел, представлені як [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) { ... }
Ось i знаходиться в межах [0, n).
Поняття інтервальної нотації випливає як з математики, так і з інформатики. Математичні позначення [
, ]
, (
, )
позначають домен (або діапазон ) інтервал.
Дужки [
і]
засоби:
Дужки (
та )
засоби:
Інтервал зі змішаними станами називається "напіввідкритим" .
Наприклад, діапазон послідовних цілих чисел від 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 замість додавання текстового шуму, такого як -1
зміщення.
Наприклад, в C або JavaScript, щоб перебрати масив з N елементів, програміст запише загальну ідіому i = 0, i < N
з інтервалом [0, N) замість трохи більш багатослівного [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 заснованих вам може знадобитися кладж манекен zero'th елемента для використання алгоритму математичного 1 на основі. наприклад, Початок індексу Python
Інтервальне позначення також важливе для чисел з плаваючою комою, щоб уникнути тонких помилок.
При роботі з числами з плаваючою комою, особливо в комп’ютерній графіці (перетворення кольорів, обчислювальна геометрія, полегшення / змішування анімації тощо), часто використовуються нормовані числа. Тобто числа між 0,0 та 1,0.
Важливо знати крайні випадки , якщо кінцеві точки включно або ексклюзивні :
Де M - деякий машинний епсилон . Ось чому іноді ви можете бачити const float EPSILON = 1e-#
ідіому в коді C (наприклад 1e-6
) для 32-бітного номера з плаваючою точкою. Це ТАКЕ питання, чи гарантує EPSILON щось? має деякі попередні подробиці. Більш вичерпну відповідь див. У статті FLT_EPSILON
Девіда Голдберга про те, що повинен знати кожен комп'ютерний арифметик з арифметикою з плаваючою комою
Деякі реалізації генератора випадкових чисел 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 |
+--------+-----+
Більш детальну інформацію про точність та стійкість з плаваючою комою з інтервалами див. У виявленні зіткнення в реальному часі Крістера Еріксона , Розділ 11 Числова стійкість , Розділ 11.3 Міцне використання з плаваючою комою .
[first, last)
це напіввідкритий інтервал, як зазначали інші. У деяких підручниках це також пишеться як[first, last>
і має абсолютно однакове значення, лише синтаксис відрізняється.