关系运算符

2022-01-05 09:55:58 浏览数 (2)

<><=,和>=运算符被称为关系运算符

关系表达式:       附加表达式       附加表达式 < 关系表达式       附加表达式 > 关系表达式       附加表达式 <= _关系表达式       附加表达式 >= 关系表达式

这些运算符用于确定两个值之间的相对排序关系,如下表所示:

手术

结果

x < y

true如果x小于y,false否则

x > y

true如果x大于y,false否则

x <= y

true如果x小于或等于y,false否则

x >= y

true如果x大于或等于y,false否则

例如:

复制

代码语言:javascript复制
0 <= 1            // true 
null < 1          // null 
null <= null      // null 
"ab" < "abc"      // true 
#nan >= #nan      // false  
#nan <= #nan      // false

在计算包含关系运算符的表达式时,以下内容成立:

  • 传播计算xy操作数表达式时引发的错误。
  • 通过对xy表达式求值而产生的值必须是数字、日期、日期时间、日期时区、持续时间、逻辑值、空值或时间值。否则,"Expression.Error"会引发带有原因代码的错误。
  • 如果一个或两个操作数都是null,则结果是null值。
  • 如果两个操作数都是逻辑的,true则认为该值大于false
  • 如果两个操作数都是持续时间,则根据它们代表的 100 纳秒滴答的总数比较这些值。
  • 通过比较它们的小时部分,如果相等,则比较它们的分钟部分,如果相等,则比较它们的第二部分,从而比较两个时间。
  • 两个日期的比较是通过比较它们的年份部分,如果相等,则比较它们的月份部分,如果相等,则比较它们的日期部分。
  • 两个日期时间的比较是通过比较它们的年份部分,如果相等,它们的月份部分,如果相等,它们的日部分,如果相等,它们的小时部分,如果相等,它们的分钟部分,如果相等,它们的第二部分。
  • 通过减去它们的小时/分钟偏移量然后比较它们的日期时间组件,将它们标准化为 UTC 来比较两个日期时区。
  • 两个数字xy根据 IEEE 754 标准的规则进行比较:
    • 如果任一操作数为#nan,则结果适用false于所有关系运算符。
    • 当两个操作数都不是 时#nan,运算符根据排序比较两个浮点操作数的值,-∞ < -max < ... < -min < -0.0 = 0.0 < min < ... < max < ∞其中 min 和 max 是可以表示的最小和最大正有限值。-∞ 和 ∞ 的 M 名称是-#infinity#infinity。 这种排序的显着影响是:
      • 负零和正零被认为是相等的。
      • 一个-#infinity值被认为小于所有其他数字值,但等于另一个-#infinity
      • 一个#infinity值被认为大于所有其他数字值,但等于另一个#infinity

条件逻辑运算符

andor运营商被称为条件逻辑运算符。

逻辑或表达式:       逻辑与表达式       逻辑与表达式 or 逻辑或表达式 逻辑与表达式:       是表达式       是表达式 and 逻辑与表达式

or操作符返回true其操作数的当至少一个true。当且仅当左操作数不是 时,才计算右操作数true

and操作符返回false其操作数的当至少一个false。当且仅当左操作数不是 时,才计算右操作数false

orand运算符的真值表如下所示,纵轴为左操作数表达式的计算结果,横轴为右操作数表达式的计算结果。

and

true

false

null

error

true

true

false

null

error

false

false

false

false

false

null

null

false

null

error

error

error

error

error

error

or

true

false

null

error

or

true

false

null

error

true

true

true

true

true

false

true

false

null

error

null

true

null

null

error

error

error

error

error

error

在评估包含条件逻辑运算符的表达式时,以下内容成立:

  • 传播计算xory表达式时引发的错误。
  • 条件逻辑运算符是在类型logical和上定义的null。如果操作数值不是这些类型,"Expression.Error"则会引发带有原因代码的错误。
  • 结果是一个逻辑值。
  • 在表达式xor 中yy当且仅当x不计算为 时才会计算表达式true
  • 在表达式xand 中yy当且仅当x不计算为 时才会计算表达式false

最后两个属性赋予条件逻辑运算符“条件”限定;特性也称为“短路”。这些属性对于编写紧凑的受保护谓词很有用。例如,以下表达式是等效的:

复制

代码语言:javascript复制
d <> 0 and n/d > 1 if d <> 0 then n/d > 1 else false

算术运算符

-*/运营商的算术运算符

加法表达式:       乘法表达式       加法表达式 乘法表达式       加法表达式 - 乘法表达式 乘法表达式:       元数据表达式       乘法表达式 * 元数据表达式       乘法表达式 / 元数据表达式

精确

M 中的数字使用多种表示形式存储,以尽可能多地保留有关来自各种来源的数字的信息。数字仅根据应用于它们的运算符的需要从一种表示形式转换为另一种表示形式。M 支持两种精度:

精确

语义

Precision.Decimal

128 位十进制表示,范围为 ±1.0 x 10-28 至 ±7.9 x 1028 和 28-29 位有效数字。

Precision.Double

使用尾数和指数的科学表示;符合 64 位二进制双精度 IEEE 754 算术标准IEEE 754-2008。

算术运算是通过选择精度,将两个操作数转换为该精度(如有必要),然后执行实际运算,最后返回所选精度的数字来执行的。

内置算术运算符 ( , -, *, /) 使用双精度。标准库函数(Value.AddValue.SubtractValue.MultiplyValue.Divide)可用于使用特定精度模型来请求这些操作。

  • 不可能出现数字溢出:#infinity-#infinity表示幅度太大而无法表示的值。
  • 没有数字下溢是可能的:0并且-0表示幅度太小而无法表示的值。
  • IEEE 754 特殊值#nan(NaN—非数字)用于覆盖算术上无效的情况,例如零除以零。
  • 从十进制到双精度的转换是通过将十进制数四舍五入到最接近的等效双精度值来执行的。
  • 从双精度到小数精度的转换是通过将双精度数四舍五入到最接近的等效十进制值并在必要时溢出到#infinity-#infinity值来执行的。

加法运算符

加法运算符 ( x y)的解释取决于计算表达式 x 和 y 的值类型,如下所示:

X

结果

解释

type number

type number

type number

数字和

type number

null

null

null

type number

null

type duration

type duration

type duration

数值和

type duration

null

null

null

type duration

null

type 约会时间

type duration

type 约会时间

按持续时间偏移的日期时间

type duration

type 约会时间

type 约会时间

type 约会时间

null

null

null

type 约会时间

null

在该表中,type 日期时间代表任何的type datetype datetimetype datetimezone,或type time。添加持续时间和某种类型的datetime值时,结果值具有相同的类型。

对于表中所列值以外的其他值组合,将"Expression.Error"引发带有原因代码的错误。以下各节介绍了每种组合。

传播评估任一操作数时引发的错误。

数字和

使用加法运算符计算两个数字的总和,产生一个数字。

例如:

复制

代码语言:javascript复制
1   1             // 2 
#nan   #infinity  // #nan

数字上的加法运算符使用双精度;标准库函数Value.Add可用于指定小数精度。在计算数字总和时,以下内容成立:

  • 双精度中的和是根据 64 位二进制双精度 IEEE 754 算术IEEE 754-2008的规则计算的。下表列出了非零有限值、零、无穷大和 NaN 的所有可能组合的结果。在表中,xy是非零有限值,z是 的结果x y。如果xy大小相同但符号相反,z则为正零。如果x y太大而无法在目标类型中表示,z则是与 具有相同符号的无穷大x y。 表 7 是 0-0 ∞-∞NaNXzXX ∞-∞NaN 0是 0 0 ∞-∞NaN-0是 0-0 ∞-∞NaN ∞ ∞ ∞ ∞NaNNaN-∞-∞-∞-∞NaN-∞NaNNaNNaNNaNNaNNaNNaNNaN
  • Decimal Precision 中的总和是在不损失精度的情况下计算的。结果的标度是两个操作数的标度中较大的一个。
持续时间总和

两个持续时间之和就是代表持续时间所代表的100纳秒滴答数之和的持续时间。例如:

复制

代码语言:javascript复制
#duration(2,1,0,15.1)   #duration(0,1,30,45.3) 
// #duration(2, 2, 31, 0.4)

0 人点赞