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

Nav*_*Nav 111 mathematical-notation

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

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

Mic*_*zek 181

括号表示范围的结尾是包含的 - 它包括列出的元素.括号表示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

  • ∞ 不是一个 *ordinal* 数,你可以用它来做算术。但在回答“有多少个整数?”之类的问题时,它是一个有效的基数。在这种情况下,它也是完全有效的 *limit* (4认同)
  • 这是从小学前代数演化而来的,在那里你学习函数f(x)和函数的域和范围,其中像f(x)= x ^ 2这样的函数的范围为0到正无穷大,用[0,∞). (3认同)
  • @Timbo ∞ 不是数字。 (2认同)
  • @pycoder你对数字的定义似乎是不必要的限制.https://en.wikipedia.org/wiki/Surreal_number (2认同)
  • @JakeD关于你的初始评论,你的方式是无穷大不是数字,因此集合[0,∞)不包括它. (2认同)

Mar*_*ers 32

这是一个半开的间隔.

  • 闭合间隔[a,b] 包括端点.
  • 开放区间(a,b) 排除它们.

在您的情况下,包括间隔开始时的结束点,但排除结束.所以它意味着间隔"first1 <= x <last1".

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

for (int i = 0; i < n; ++i) { ... } 
Run Code Online (Sandbox Code Playgroud)

这里我在[0,n]范围内.


Mic*_*007 13

概念间隔符号中出现两个数学与计算机科学.数学表示法[,],(,)表示所述结构域(或 范围的间隔).

  • 括号[]手段:

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

    1. 这个数字被排除在外,
    2. 间隔的这一面是开放的.

具有混合状态的间隔称为"半开".

例如,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
Run Code Online (Sandbox Code Playgroud)

这与数学和计算机科学有什么关系?

数组索引倾向于使用不同的偏移量,具体取决于您所在的字段:

  • 数学往往是一个基础.
  • 某些编程语言往往是基础的,例如C,C++,Javascript,Python,而Mathematica,Fortran,Pascal等其他语言都是基于单一的.

这些差异可能导致细微的栅栏后错误,也就是说,在实现数学算法(例如for循环)时会出现一个错误.

整型

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

  • a 1 = 2
  • a 2 = 3
  • :
  • a 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)而不是稍微更详细的[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;
}
Run Code Online (Sandbox Code Playgroud)
 <html>
     <body onload="main();">
         <pre id="output1"></pre>
     </body>
 </html>
Run Code Online (Sandbox Code Playgroud)

数学家,因为他们从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;
}
Run Code Online (Sandbox Code Playgroud)
<html>
    <body onload="main()";>
        <pre id="output2"></pre>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

除了:

在被从0您可能需要一个编程语言杂牌虚拟第零元素的使用基于1 -数学算法.例如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是一些机器epsilon.这就是为什么你有时可能会const float EPSILON = 1e-#在C代码(例如1e-6)中看到32位浮点数的习语.这个问题EPSILON能保证什么吗?有一些初步细节.有关更全面的答案,请参阅FLT_EPSILONDavid Goldberg的"每个计算机科学家应该知道的关于浮点算术的内容"

随机数生成器的一些实现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 |
     +--------+-----+
Run Code Online (Sandbox Code Playgroud)

有关浮点精度和间隔鲁棒性的更多详细信息,请参阅Christer Ericson的实时碰撞检测,第11章数值稳健性,第11.3节鲁棒浮点使用.