4 数值数据类型

数值常量可以是标量、向量或矩阵,并且可以包含复数值。

数值常量的最简单形式——标量,是一个单独的数字。请注意,默认情况下,数值在 Octave 中以 IEEE 754 双精度(binary64)浮点格式表示(复数常量存储为一对 binary64 值)。然而,也可以按照整数数据类型中描述的方式表示真正的整数。

如果数值常量是实整数,则可以用十进制、十六进制或二进制表示法来表示。然而,一个重要的区别是:十进制常量将以 binary64 值存储,而使用十六进制或二进制表示法则会产生一个真正的整数,其存储类型恰好足够容纳指定的数值。十六进制表示法以0x0X开头,二进制表示法以0b0B开头,否则默认为十进制表示法。因此,0b不是十六进制数,实际上它根本不是一个有效的数字。

为了提高可读性,可以使用下划线分隔符_对数字进行分组,该分隔符会被 Octave 解释器忽略。以下是一些实整数值常量(都表示相同的值)的示例:

42            # 十进制表示法,binary64
0x2A          # 十六进制表示法
0b101010      # 二进制表示法
0b10_1010     # 下划线表示法
round (42.1)  # 也是 binary64

在十进制表示法中,数值常量可以用十进制小数表示,甚至可以用科学记数法(指数记数法)表示。请注意,这对于十六进制或二进制表示法是不可能的。同样,在以下示例中,所有数值常量都表示相同的值:

.105
1.05e-1
.00105e+2

与大多数编程语言不同,复数数值常量表示为实部和虚部的和。虚部由一个实数值常量后紧跟一个复数值指示符(ijIJ,表示sqrt (-1))来表示。数值常量和复数值指示符之间不允许有空格。所有复数值都存储为一对 binary64 值,使用十六进制或二进制表示法并不会产生真正的整数。以下是一些表示相同值的复数数值常量的示例:

3 + 42i
3 + 42j
3 + 42I
3 + 42J
3.0 + 42.0i
3.0 + 0x2Ai
3.0 + 0b10_1010i
0.3e1 + 420e-1i
 
y = double (x)

x转换为双精度类型。

参见: single

 
z = complex (x)
z = complex (re, im)

根据实参返回一个复数值。

使用1个实参x时,返回复数结果x + 0i

使用2个实参时,返回复数结果re + imicomplex通常比a + b*i这样的表达式更方便。例如:

complex ([1, 2], [3, 4])
  ⇒  [ 1 + 3i   2 + 4i ]

参见: realimagiscomplexabsarg

当虚部为零时,Octave 会自动将复数类型"收缩"为实数类型。解释器在每次有机会时都会执行这种收缩,以节省内存并模拟 MATLAB 的行为。例如,如果一个变量最初具有复数值4 + 2i,然后从中减去2i,那么它就会变成实数类型4,而不是复数类型4 + 0i。使用表达式iscomplex (4+2i - 2i)测试结果类型是否为复数,将返回 false。

要确保即使虚部为零,值也保持为复数类型,请使用complex (4, 0)而不是4 + 0i。但即使这样,除非其虚部真正变为非零,否则解释器仍将在对其进行下一次修改(例如向其加1)时将类型收缩为实数。


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4