//+------------------------------------------------------------------+//| Сравнивает два значения типа double. |//| RESULT |//| Возвращает истину, если значения равны и |//| ложь в противном случе. |//+------------------------------------------------------------------+bool CEnvironment::DoubleEquals(constdouble a,constdouble b)
{
//---return(fabs(a-b)<=16*DBL_EPSILON*fmax(fabs(a),fabs(b)));
//---
}
事实证明,#import ex5是优化的邪恶。
就能够在全球范围内进行优化而言,是的。
我们有相当积极的内联,而不试图使代码变小。所以在全局优化模式下,我们会产生非常好的代码。
这可以在编译时看到,我们把产生的速度放在首位。
fxsaber
你的代码中存在一个错误
谢谢你,更正了。
仍然是一个错误。
最后应该是5。
仍然是一个错误
这不是一个错误,是四舍五入的结果。标准版就是这样做的。
下面是供你测试的代码
这是你的代码,测试一下吧。
Val2--正确。转换为长线后的Val3 - 不正确。很明显,这是浮点数的双倍表示法的一些特殊性。我们需要增加EPSILON。我昏昏欲睡的脑子里怎么也想不出来。也许一些有见识的人可以给我一个提示。
我需要弄清楚开发人员 在写这篇文章时是出于 何种考虑
这似乎是狗被埋葬的地方。
这似乎是狗被埋葬的地方。
根植于RSDN论坛
当然,有些情况下,数字的范围或多或少是已知和可预测的。比如,0...1000。在这种情况下,你可以取一个常数,如1000*16*DBL_EPSILON,进行粗略的比较。但我们必须记住,这样的比较实际上是把整个浮点的想法变成了固定点(猜猜为什么)。
CopyTicks的一个变种,它有时比原来的速度快几个数量级(从>0)。