Тестирование на «двойное» равенство в javascript
Я перевел экспериментальный C #поплавок» версияБиблиотека Clipper в javascript. В новейшей версии песочницы есть функцияIsAlmostEqual который, кажется, трудно перевести. Двойное равенство нельзя сравнивать с помощью оператора == из-за проблем со стабильностью чисел, поэтому эта функция необходима для решения этих проблем.
-9223372036854775808 - aInt
а также-9223372036854775808 - bInt
легко рассчитать, например, с помощью Библиотека BigInteger, ноBitConverter.DoubleToInt64Bits
сложнее.
Любая идея, как перевестиIsAlmostEqual
Функция для JavaScript? Или конкретно как реализоватьBitConverter.DoubleToInt64Bits
в JavaScript?
private static bool IsAlmostEqual(double A, double B)
{
//http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
Int64 aInt = BitConverter.DoubleToInt64Bits(A);
if (aInt < 0) aInt = unchecked(-9223372036854775808 - aInt);
Int64 bInt = BitConverter.DoubleToInt64Bits(B);
if (bInt < 0) bInt = unchecked(-9223372036854775808 - bInt);
return (Math.Abs(aInt - bInt)