【发布时间】:2015-06-12 16:08:01
【问题描述】:
我正在尝试关闭 matlab 中的非正规数支持,因此基本上任何两个会导致非正规数的计算都只会导致零(DAZ,FTZ)
我研究了几个网站,包括以下网站,但我没有发现任何关于这样做的信息。
【问题讨论】:
标签: matlab floating-point
我正在尝试关闭 matlab 中的非正规数支持,因此基本上任何两个会导致非正规数的计算都只会导致零(DAZ,FTZ)
我研究了几个网站,包括以下网站,但我没有发现任何关于这样做的信息。
【问题讨论】:
标签: matlab floating-point
我在 Matlab 中从未听说过这样的选项。它可能需要对大量浮点数学进行深度操作,如果要在 Matlab 中成为一个易于切换的选项,则实际上需要支持新的数据类型。您可以为单个函数编写自己的 mex C 代码(more here 和 here)。
当然,你可以用一行 Matlab 得到类似的东西——这里有一个例子:
a = [1e-300 1e-310 1e-310];
b = [1e-301 1e-311 1e-310];
x = a-b;
x(abs(x(:)) < realmin(class(x))) = 0;
其中realmin 是最小的normalized floating-point number。但是,浮点数学仍然使用a 中的扩展非正规/次正规值来执行。只是输出被剪裁为零。
除非您这样做是为了有趣的实验,或者可能在嵌入式平台上运行代码,否则我真的建议您不要禁用非规范化作为一种优化形式。相反,请关注为什么您的值如此之小以及如何重新调整问题以完全避免该问题。
【讨论】: