Matlab 的 double 类型
文章目录
我曾一直以为,MATLAB 的 double
数据类型就是 C/C++ 中的 double
类型,即双精度浮点数,正如 MATLAB 和 C/C++ 中的 int
都是整数一样。直到不久前,我才发现并不是如此。
问题的发现
几天前,我遇到一个问题,需要把一个字符串转换成整数。那时我已经知道了,把整数转换成字符串的函数是 int2str()
,于是猜想,把字符串反过来转换成整数的函数应该是 str2int()
,但是在 MATLAB 的幫助中搜索它,居然找不到。我索性在搜索框中输入 str2
几个字符,看看会弹出什么提示,于是就找到了 str2num()
函数。一想,也对,MATLAB 必竟是高级语言,应该会自动判断字符串是整数还是浮点数,所以就只需要一个函数了。
但是,在使用 str2num()
函数转换字符串时,MATLAB 又提示我,「如果您要对标量值进行操作,请考虑使用 STR2DOUBLE 以提高性能」。这时我就疑惑了,我要转换出整数,可是 str2double()
听名字,应该只能转换出浮点数,这怎么能替换呢?
再深入看一下 MATLAB 关于数据类型的文档,就可以得出答案。
double
究竟是什么
MATLAB 的文档中对于 double
的介绍是:
double is the default numeric data type (class) in MATLAB®, providing sufficient precision for most computational tasks. Numeric variables are automatically stored as 64-bit (8-byte) double-precision floating-point values.
从这两句话中我们可以获得这几个信息:
double
是 MATLAB 的默认数据类型。也就是说,不指明数据类型的赋值语句,例如a=3
、b=[1 2 3]
,都是自动赋值为double
类型的。double
可以给大多数计算任务提供足够的精度。double
类型是 64 比特,即 8 字节的双精度浮点数。
这么看起来,double
不就根 C/C++ 中的双精度浮点数一样吗?但是,它与 C/C++ 中的浮点数的确有区别。
MATLAB 中的 double
的特殊性
根据我的测试,MATLAB 中的 double
类型和 C/C++ 中的 double
类型的不同,主要体现在用来存放整数时的表现上。
当 MATLAB 的 double
变量中存放一个整数值时,它会表现得和整数一模一样:它仍然可以像整数一样进行计算,并且结果也会像整数一样打印出来,不会有小数点;而 C/C++ 中的 double
变量,不管存放了什么,打印出来都会是有小数点的。MATLAB 中的 double
,只要其中存储的是正整数,甚至可以当成数组下标来使用。
这也是可以理解的,毕竟,MATLAB 是弱类型的,把数据类型弄得少一点、统一一点,可以方便使用,让用户可以把主要精力放在计算本身上。