【发布时间】:2014-02-14 21:48:28
【问题描述】:
这个问题与this有关,但是因为我尝试优化功能以提高速度,所以我作为一个新问题提出这个问题。
我正在将新的 floats Clipper library 从 Angus Johnson 翻译成 Javascript,并且有一个函数 IsAlmostEqual,它使用 Ulps 技术比较双精度数是否相等。
原来的C#函数在这里:
公共静态布尔IsAlmostEqual(双A,双B) { //http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm 常量 int maxUlps = 10000; Int64 aInt = BitConverter.DoubleToInt64Bits(A); if (aInt aInt != bInt -maxUlps) || (sub > 0 && sub还有我的翻译(JSBIN):
var IsAlmostEqual_Ulps = 函数(A,B) { DoubleToInt64Bits(A, aInt); 如果(aInt.hi根据 83 个样本值,我的 Javascript 版本似乎可以正常工作,但问题是速度慢,主要来自 DoubleToInt64Bits 函数。当代码作为独立的 html(JSBIN 之外)执行时,总运行时间约为 2267 毫秒,其中DoubleToInt64Bits 需要 983 毫秒。
有问题的(=慢)DoubleToInt64Bits 在这里:
有什么方法可以让DoubleToInt64Bits 更快?
【问题讨论】:
标签: c# javascript double int64