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 是弱类型的,把数据类型弄得少一点、统一一点,可以方便使用,让用户可以把主要精力放在计算本身上。