Я видел диапазоны номеров, представленные как [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
Как это связано с математикой и информатикой?
В индексах массивов обычно используется разное смещение в зависимости от того, в каком поле вы находитесь:
Эти различия могут привести к незначительным ошибкам столбов забора , иначе говоря, по одному. ошибок при реализации математических алгоритмов , таких как для-петли.
Если у нас есть набор или массив, скажем, из первых нескольких простых чисел [ 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>
и имеет точно такое же значение, только синтаксис отличается.