例如在Matlab中:
log(exp(-200)
-200
然而
log(exp(-2000))
-inf
自然地,log
函数的输入传递为零,因为exp(-2000)
无关紧要且log
给出-inf
。如何解决这个问题才能收到-2000?
答案 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,其中重写成功避免了问题。