这个方括号和圆括号表示法是什么意思?

2024-04-19 11:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我见过用[first1,last1)[first2,last2)表示的数字范围。

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


Tags: 数字记号first2first1last1last2
3条回答

括号表示范围的结尾是包含的,它包含列出的元素。圆括号表示结束是排他的,不包含列出的元素。因此对于[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. 数字已包含在内
    2. 区间的这一边是闭合的
  • 括号()表示:

    1. 数字被排除在外
    2. 间隔的这一边是打开

具有混合状态的间隔称为“半开”。

例如,从1..开始的连续整数范围。。10(包括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

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

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

  • 数学往往是以为基础的。
  • 某些编程语言倾向于 0 EME>,如C、C++、JavaScript、Python,而其他语言如Mathematica、Fortran、Pascal等是一种基于语言的编程语言。

在实现for循环等数学算法时,这些差异可能会导致细微的fence post错误。

整数

如果我们有一个集合或数组,比如前几个素数,数学家会把第一个元素称为绝对元素。i、 e.使用下标符号表示索引:

  • a1=2
  • a2=3
  • 以下内容:
  • a10=29

与此相反,一些编程语言将第一个元素称为zero'threlative元素。

  • a[0]=2
  • a[1]=3
  • 以下内容:
  • a[9]=29

由于数组索引在[0,N-1]范围内,因此为了清楚起见,保持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;
}
 <html>
     <body onload="main();">
         <pre id="output1"></pre>
     </body>
 </html>

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

例如

&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;
}
<html>
    <body onload="main()";>
        <pre id="output2"></pre>
    </body>
</html>

旁边

在基于0的编程语言中,可能需要使用第0个虚拟元素的kludge来使用基于1的数学算法。e、 克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位浮点数。这个问题有一些初步的细节。更全面的答案请参见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位像素。根据由random()输出的间隔,您可能最终得到near-white(254254254)或white(255255255)。
     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- error introduced
     |1.0     | 255 |
     +--------+-----+

有关浮点精度和区间稳健性的更多详细信息,请参见Christer Ericson的Real-Time Collision Detection,第11章“数值稳健性”,第11.3节“稳健性浮点用法”。

那是一个half-open interval

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

在您的情况下,包括间隔开始时的端点,但不包括结束时的端点。所以它的意思是间隔“first1<;=x<;last1”。

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

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

我在[0,n]范围内。

相关问题 更多 >