如何规避极小的输出值?

时间:2016-02-23 20:33:50

标签: matlab precision

例如在Matlab中:

log(exp(-200)
-200

然而

log(exp(-2000))
-inf

自然地,log函数的输入传递为零,因为exp(-2000)无关紧要且log给出-inf。如何解决这个问题才能收到-2000?

2 个答案:

答案 0 :(得分:3)

如果您拥有Symbolic Math Toolbox,则可以使用Variable Precision Arithmetic执行此操作。使用$error->error_description 函数并将数学表达式作为输入放入包含在字符串中的vpa

vpa

但是,这将以符号格式表示,因此在完成后转换回数值可能是谨慎的。执行计算后,使用double转换此结果:

>> vpa('log(exp(-2000))')

ans =

-2000.0

答案 1 :(得分:1)

通常可以以不超过浮点值范围的方式重写公式。在你的情况下,重写它将是微不足道的public class Loop implements Observer { Connect connect; public Loop() { connect = new Connect(this); } // Called when notifyObservers() is fired @Override public void update(Observable o, Object arg) { Connect connect = (Connect) o; try { if(connect.conn.isClosed()) { // -------- } else { // -------- } } catch (SQLException e) { e.printStackTrace(); } } } 。可以找到一个更“真实世界”的例子in this question,其中重写成功避免了问题。