나는로 표현 번호 범위 본 [first1,last1)
과 [first2,last2)
.
그런 표기법의 의미를 알고 싶습니다.
답변
대괄호는 범위의 끝이 포함됨을 의미하며 여기에는 나열된 요소 가 포함 됩니다. 괄호는 end가 배타적 이며 나열된 요소를 포함하지 않음을 의미합니다 . 따라서의 [first1, last1)
경우 범위는로 시작 first1
하고 포함하지만 바로 직전에 끝납니다 last1
.
정수를 가정 :
- (0, 5) = 1, 2, 3, 4
- (0, 5] = 1, 2, 3, 4, 5
- [0, 5) = 0, 1, 2, 3, 4
- [0, 5] = 0, 1, 2, 3, 4, 5
답변
즉 A의 반 개방 구간 .
- 닫힌 간격
[a,b]
에는 끝 점이 포함됩니다 . - 열린 간격은
(a,b)
제외 됩니다.
귀하의 경우 간격이 시작될 때 끝 점이 포함되지만 끝은 제외됩니다. 따라서 “first1 <= x <last1″간격을 의미합니다.
반 개방 구간은 반복에 대한 일반적인 관용구에 해당하므로 프로그래밍에 유용합니다.
for (int i = 0; i < n; ++i) { ... }
여기서 i는 [0, n) 범위에 있습니다.
답변
의 개념 간격 표기법 에 온다 모두 수학 및 컴퓨터 과학. 수학 표기법 [
, ]
, (
, )
나타낸다 도메인 (또는 범위 간격의가).
-
괄호
[
와]
수단 :- 숫자가 포함되어 있습니다 .
- 구간의이 쪽이 닫힙니다 .
-
괄호
(
와)
의미 :- 이 번호는 제외됩니다 .
- 간격의이 쪽이 열려 있습니다.
혼합 상태의 간격을 “half-open”이라고 합니다.
예를 들어, 1에서 연속 정수 범위 .. 10 (포함) 될 기보 등 :
- [1,10]
단어 inclusive
가 어떻게 사용 되었는지 주목하십시오 . 종점 을 제외 하고 동일한 범위를 “표지”하려면 종점을 이동해야합니다.
- [1,11)
구간의 왼쪽과 오른쪽 가장자리 모두 실제로 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
이것이 수학 및 컴퓨터 과학과 어떤 관련이 있습니까?
배열 인덱스는 어떤 필드에 있는지에 따라 다른 오프셋 을 사용하는 경향 이 있습니다.
- 수학은 일대일 경향이 있습니다 .
- C, C ++, Javascript, Python과 같은 특정 프로그래밍 언어는 0 기반이지만 Mathematica, Fortran, Pascal과 같은 다른 언어는 1 기반입니다.
이러한 차이는 미묘한으로 이어질 수 있습니다 울타리 게시물 오류 , 일명, 오프별로 한 등을위한-루프와 같은 수학적 알고리즘을 구현할 때 버그.
정수
처음 몇 소수 [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
와 같이 집합이나 배열이 있으면 수학자들은 첫 번째 요소를 1st
절대 요소라고합니다. 즉 첨자 표기법을 사용하여 색인을 나타냅니다.
- a 1 = 2
- a 2 = 3
- :
- 10 = 29
모순되는 일부 프로그래밍 언어는 첫 번째 요소를 zero'th
상대 요소라고합니다.
- a [0] = 2
- a [1] = 3
- :
- a [9] = 29
배열 인덱스가 [0, N-1] 범위에 있기 때문에 명확성을 위해 바이어스 와 같은 텍스트 노이즈 를 추가하는 대신 0.N 범위에 대해 동일한 숫자 값을 유지하는 것이 “좋습니다” -1
.
예를 들어, C 또는 JavaScript에서 N 개의 요소 배열을 반복하기 위해 프로그래머는 i = 0, i < N
약간 더 장황한 [0, N-1] 대신 간격 [0, N)으로 공통 관용구를 씁니다 .
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
명명법을 사용 하지만 이제는 0부터 시작하는 언어로 배열 오프셋을 수정해야합니다.
예 :
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 기반의 알고리즘을 사용하는 더미 0 번째 요소입니다. 예 : Python Index Start
부동 소수점
미묘한 버그를 피하기 위해 부동 소수점 숫자에도 간격 표기법이 중요합니다.
특히 컴퓨터 그래픽 (컬러 변환, 계산 기하학, 애니메이션 여유 / 혼합 등)에서 부동 소수점 숫자를 다룰 때 정규화 된 숫자가 자주 사용됩니다. 즉, 0.0과 1.0 사이의 숫자입니다.
엔드 포인트가 포괄적 이거나 배타적 인 경우 에지 사례를 아는 것이 중요합니다 .
- (0,1) = 1e-M .. 0.999 …
- (0,1] = 1e-M .. 1.0
- [0,1) = 0.0 .. 0.999 …
- [0,1] = 0.0 .. 1.0
여기서 M은 일부 기계 엡실론 입니다. 32 비트 부동 소수점 숫자에 대해 const float EPSILON = 1e-#
C 코드에서 (예 :와 같은 1e-6
) 관용구 가 표시되는 경우가 있습니다 . 이 SO 질문 EPSILON은 무엇을 보증합니까? 예비 세부 정보가 있습니다. 보다 포괄적 인 답변을 보려면 FLT_EPSILON
David Goldberg의 모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 사항을 참조하십시오.
난수 생성기의 일부 구현은 random()
보다 편리한 0.0 .. 1.0 대신 0.0 .. 0.999 … 범위의 값을 생성 할 수 있습니다. 코드에서 적절한 주석은이를 [0.0,1.0) 또는 [0.0,1.0]으로 문서화하므로 사용법에 대한 모호함이 없습니다.
예:
random()
색상 을 생성하려고합니다 . 3 개의 부동 소수점 값을 부호없는 8 비트 값으로 변환하여 각각 빨강, 녹색 및 파랑 채널을 가진 24 비트 픽셀을 생성합니다. 출력 간격에 따라 (254,254,254) 또는 (255,255,255)로random()
끝날 수 있습니다 .near-white
white
+--------+-----+
|random()|Byte |
|--------|-----|
|0.999...| 254 | <-- error introduced
|1.0 | 255 |
+--------+-----+
간격을 사용한 부동 소수점 정밀도 및 견고성에 대한 자세한 내용은 Christer Ericson의 실시간 충돌 감지 , 11 장 수치 견고성 , 11.3 강력한 부동 소수점 사용법을 참조하십시오 .
답변
대괄호는 “극단적 포함”을 의미하고 둥근 대괄호는 “극단적 독점”을 의미하는 간격을 정의 할 때 수학적 규칙이 될 수 있습니다.