如何在MATLAB中关闭非正规数支持?

时间:2015-04-07 21:59:29

标签: matlab floating-point

我试图在matlab中关闭非正规数支持,因此基本上任何两个导致非正规数的计算都只会导致零(DAZ,FTZ)

我研究了几个网站,包括下面的网站,但我还没有找到任何关于这样做的网站。

http://blogs.mathworks.com/cleve/2014/07/21/floating-point-denormals-insignificant-but-controversial-2/

1 个答案:

答案 0 :(得分:0)

我从未在Matlab中听说过这样的选项。它可能需要对许多浮点数学进行深度处理,如果在Matlab中这是一个易于切换的选项,则需要支持新的数据类型。您可以编写自己的mex C代码来执行此操作(more herehere)。

当然,你可以通过一行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中的扩展非正规/次正规值执行浮点数学运算。它只是将输出剪辑为零。

除非你是为了实验或在嵌入式平台上运行代码来实现这一目的,否则我真的建议不要将非规范作为一种优化形式。相反,请关注为什么您的价值如此之小以及如何重新调整问题以完全避免问题。