我看到的数字范围表示为[first1,last1)
和[first2,last2)
。
我想知道这样的符号是什么意思。
答案 0 :(得分:158)
括号表示范围的末尾包含 - 它包含列出的元素。括号表示结尾是独占,并且不包含列出的元素。因此,对于[first1, last1)
,范围以first1
开头(并包含它),但在last1
之前结束。
假设整数:
答案 1 :(得分:30)
[a,b]
包括结束点。(a,b)
不包括。在您的情况下,包含间隔开始处的终点,但排除结束。所以它意味着间隔“first1< = x< last1”。
半开区间在编程中很有用,因为它们对应于循环的常用习语:
for (int i = 0; i < n; ++i) { ... }
这里我在[0,n)范围内。
答案 2 :(得分:12)
区间符号的概念出现在 数学和计算机科学中。数学符号[
,]
,(
,)
表示区间的域(或范围)
括号[
和]
表示:
括号(
和)
表示:
具有混合状态的间隔称为&#34;半开&#34; 。
例如,1 ... 10(含)的连续整数范围将标记为:
注意如何使用单词inclusive
。如果我们想排除结束点,但是&#34;覆盖&#34;我们需要移动终点的相同范围:
对于区间的左右边缘,实际上有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循环)时导致细微的 fence post错误,又称off-by-one错误。
如果我们有一个集合或数组,比如前几个素数[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
,数学家会将第一个元素称为1st
绝对元素。即使用下标表示法来表示索引:
相比之下,某些编程语言会将第一个元素称为zero'th
relative 元素。
由于数组索引在[0,N-1]的范围内,因此为了清楚起见,它将是#34; nice&#34;保持范围为0 .. N的相同数值,而不是添加文本噪声,例如-1
偏差。
例如,在C或JavaScript中,为了迭代N个元素的数组,程序员会用{0,N}来编写i = 0, i < 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;
}
&#13;
<html>
<body onload="main();">
<pre id="output1"></pre>
</body>
</html>
&#13;
数学家,因为他们从1开始计数,而是使用i = 1, i <= N
命名法,但现在我们需要用零基础语言校正数组偏移量。
e.g。
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;
}
&#13;
<html>
<body onload="main()";>
<pre id="output2"></pre>
</body>
</html>
&#13;
<强>除了强>:
在基于0的编程语言中,您可能需要使用基于数学1的算法的虚拟零元素的 kludge 。例如Python Index Start
对于浮点数来说,间隔符号也很重要,可以避免细微的错误。
当处理浮点数时,特别是在计算机图形(颜色转换,计算几何,动画缓动/混合等)中,通常使用标准化数字。也就是说,数字介于0.0和1.0之间。
如果端点包含或独占,了解边缘情况非常重要:
其中M是machine epsilon。这就是为什么有时可能会在C代码(例如const float EPSILON = 1e-#
)中看到1e-6
用于32位浮点数的习惯用法。这个问题Does EPSILON guarantee anything?有一些初步细节。有关更全面的答案,请参阅FLT_EPSILON
和David Goldberg的What Every Computer Scientist Should Know About Floating-Point Arithmetic
随机数生成器random()
的某些实现可能会生成0.0 ... 0.999范围内的值...而不是更方便的0.0 .. 1.0。代码中的正确注释将其记录为[0.0,1.0)或[0.0,1.0],因此对于使用没有歧义。
示例:
random()
种颜色。将三个浮点值转换为无符号8位值,以分别生成带有红色,绿色和蓝色通道的24位像素。根据{{1}}的间隔输出,您最终可能会得到random()
(254,254,254)或near-white
(255,255,255)。white
有关浮点精度和间隔鲁棒性的更多详细信息,请参阅Christer Ericson的Real-Time Collision Detection,第11章数值稳健性,第11.3节强大的浮点使用
答案 3 :(得分:1)
它可以是间隔定义中的数学约定,其中方括号表示“极值包含”和圆括号“极值排他”。