为什么MATLAB甚至有单精度变量?

8视图(30天)
如果你使用一个单精度变量和打算使用它在任何时间在任何未来的计算,所有产品和金额包括单变量也将单一变量。s manbetx 845它几乎像是如果你开始使用一个变量在单精度,你所有的输出可能是单变量。
它让我想起了虚构的场景:一个人收集数据有两个尺寸的纸写数字观察——一个是十倍的大小。需要更多的努力(时间和精力)搬运大的纸,所以你只会使用它如果你有非常精确的测量记录。
对于任何怀疑计算单精度变量是谁更快,试试以下的命令:
m1 =兰德(999999);
m2 =兰德(大小(m1));
抽搐
m3 = m1。*平方米;
toc
m1 =单(m1);
m2 =单(m2);
抽搐
m4 = m1。*平方米;
toc
结果表明减少计算时间的至少一个数量级,如果不是两个或更多。
6个评论
赛斯Wagenman
赛斯Wagenman 2014年9月3日
编辑:沃尔特·罗伯森 2018年7月10日
我救了这个函数的m文件。如果数量与双精度平均处理时间,说,五倍比平均单处理时间长,下面的脚本将生产400,不是吗?
2 dt = 0(20日);i = 1:20, dt(我:)= singdub;结束,(min (dt); md =值(dt); (md (1) / md (2) 1) * 100
因此,400年计算的要点是什么?对我来说,更有趣的数量是5比1的比例……

登录置评。

接受的答案

亚当
亚当 2014年9月3日
我不太确定你问真的。
我开始经常使用“单”越来越多的现在,因为我们使用非常大的数据集,而存储在文件作为整数,必须转换为浮点Matlab数学,但由于双重需要内存的两倍一个这是一个经常过度使用内存。
双给很少的额外的精度有关,特别是考虑到年底我做任何计算最终结果将转换回整数还是必要的精确度损失。
传播的数据类型从一开始就通过其结果虽然并不罕见。在c++中你通常需要投到一个不同的数据类型(或接受警告代码中)如果你想要一种不同类型的结果原来的变量。
2的评论
何塞•路易斯•
何塞•路易斯• 2014年9月3日
鼓励可能来自那些已经被坏一点世俗偏见。如果每个人都使用 那么这些问题就不存在。符合规范需要灵活性的另一方面。
这取决于你的问题。如果精度是一个问题,然后甚至 是不够的。如果你有一个数据密集型应用程序使用 可能是路要走。

登录置评。

答案(1)

大卫年轻
大卫年轻 2014年9月3日
编辑:大卫年轻 2014年9月3日
在大多数情况下,双精度计算很好,因为不太可能受到舍入误差的影响(尽管仍然很重要记住它们)。然而,减少内存使用有时更重要的(例如,如果处理大图像),然后单精度是一个更好的选择。这是一个易于理解的权衡。
更有趣的问题对MATLAB是关于类型转换规则。在C语言中,例如,如果一个二元运算符有一个浮点数(即单)操作数和双操作数转换为浮动双手术前就完成了。在MATLAB中,另一方面,转化为一个单一的两倍。更普遍的是,C运行使用整数的“促销”浮动和更高的精度较低,而MATLAB进行标量双打的“降级”匹配类型。
我怀疑这是因为MATLAB有非常强烈的双正常,默认情况下,标准类型。因此,假设是,如果您正在使用一些其他类型你有很好的理由这样做,所以你想要这种传播在整个计算,而不是发现你有一个意外提升一倍。这似乎是合理的。
4评论
dpb
dpb 2014年9月3日
编辑:dpb 2014年9月4日
是的,对于一个松散的定义“近似”……:)保持相同的工作精度的结果……与双一样,取决于所涉及的计算,实际结果的精度是什么可能不是任何接近的数字结果。看到克里夫的Matlab那样和一些其他作品开始
你可能会发现几个部分精度和避免问题特别感兴趣的和适当的问题和讨论。
我将假设Matlab和使用开始的原因 为默认回到的基本思想是“矩阵实验室”应用程序,目的是能够首先教学法上,然后更多用于实际应用。对于前者,不必担心不必要的精度意味着可以,在大多数情况下,用Matlab写东西,模拟实际的矩阵运算,得到合理的结果。
也为应用程序中有许多人解决系统的硬DEs或坏心肠的许多方程组中精度或结果是可能没有的一切。我们还经常从那些帖子问题甚至超过了什么 可以做简单的应用程序——就一个星期左右前一个查询从一个人上来,他的问题矩阵的条件数otoo 10 e17即使正规化。有困难的问题。
至于传播通过无需显式铸造、这是一个(相对)最近的特性……就在R12
> > x =单(π);
> > y = 2 * x;
? ? ?错误使用= = > *
函数‘*’没有定义为变量的类“单身”。
> >
我不知道哪个版本 作为一个成熟的数字类,我没有版本之间R12和R2012b,跨度约为10年左右……

登录置评。

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!