这个方括号和括号括号表示[first1,last1]是什么意思?

时间:2010-12-09 08:39:29

标签: mathematical-notation

我看到的数字范围表示为[first1,last1)[first2,last2)

我想知道这样的符号是什么意思。

4 个答案:

答案 0 :(得分:158)

括号表示范围的末尾包含 - 它包含列出的元素。括号表示结尾是独占,并且不包含列出的元素。因此,对于[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

答案 1 :(得分:30)

那是half-open interval

  • 关闭时间间隔[a,b] 包括结束点。
  • 开放时间间隔(a,b) 不包括

在您的情况下,包含间隔开始处的终点,但排除结束。所以它意味着间隔“first1< = x< last1”。

半开区间在编程中很有用,因为它们对应于循环的常用习语:

for (int i = 0; i < n; ++i) { ... } 

这里我在[0,n)范围内。

答案 2 :(得分:12)

区间符号的概念出现在 数学和计算机科学中。数学符号[]()表示区间的(或范围

  • 括号[]表示:

    1. 数字包含
    2. 间隔的这一边是关闭
  • 括号()表示:

    1. 该号码已排除
    2. 间隔的这一边是 open

具有混合状态的间隔称为&#34;半开&#34;

例如,1 ... 10(含)的连续整数范围将标记为

  • [1,10]

注意如何使用单词inclusive。如果我们想排除结束点,但是&#34;覆盖&#34;我们需要移动终点的相同范围:

  • [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,而其他语言如Mathematica,Fortran,Pascal则是基于一种语言。

这些差异可能会在实现数学算法(如for循环)时导致细微的 fence post错误,又称off-by-one错误。

整数

如果我们有一个集合或数组,比如前几个素数[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ],数学家会将第一个元素称为1st 绝对元素。即使用下标表示法来表示索引:

  • a 1 = 2
  • a 2 = 3
  • a 10 = 29

相比之下,某些编程语言会将第一个元素称为zero'th relative 元素。

  • a [0] = 2
  • a [1] = 3
  • a [9] = 29

由于数组索引在[0,N-1]的范围内,因此为了清楚起见,它将是#34; nice&#34;保持范围为0 .. N的相同数值,而不是添加文本噪声,例如-1偏差。

例如,在C或JavaScript中,为了迭代N个元素的数组,程序员会用{0,N}来编写i = 0, i < N的常用惯用语而不是稍微冗长的[0,N] -1]:

&#13;
&#13;
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;
&#13;
&#13;

数学家,因为他们从1开始计数,而是使用i = 1, i <= N命名法,但现在我们需要用零基础语言校正数组偏移量。

e.g。

&#13;
&#13;
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;
&#13;
&#13;

<强>除了

在基于0的编程语言中,您可能需要使用基于数学1的算法的虚拟零元素的 kludge 。例如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是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)

它可以是间隔定义中的数学约定,其中方括号表示“极值包含”和圆括号“极值排他”。