Well, since my original "insight" wasn't too helpful, here's another answer, that simply takes your existing functions and reorganizes them to minimize repetitive object constructor calls:
var ULPS2 = function(){
var buf2 = new ArrayBuffer(8);
var dataView2A = new DataView(buf2);
var dataView2B = new DataView(buf2);
var aInt=new Int64(0, 0), bInt=new Int64(0, 0);
var sub;
this.IsAlmostEqual=function(A,B){
if (A==B) return true;
dataView2A.setFloat64(0, A);
aInt.lo = dataView2A.getInt32(4) | 0;
aInt.hi = dataView2A.getInt32(0) | 0;
dataView2B.setFloat64(0, B);
bInt.lo = dataView2B.getInt32(4) | 0;
bInt.hi = dataView2B.getInt32(0) | 0;
if(aInt.hi < 0) aInt = subtract(Int64_MinValue, aInt);
if(bInt.hi < 0) bInt = subtract(Int64_MinValue, bInt);
sub = subtract(aInt, bInt);
if (sub.hi < 0) sub = negate(sub);
if (lessthan(sub, maxUlps)) return true;
return false;
}
}
var Ulps2=new ULPS2();
Based on a test in Chrome and Firefox at http://jsbin.com/IWoyIDO/2/ , it appears to yield a 30%-50% improvement. Not phenomenal, but at least better than the 5-10% improvement you were originally mentioning.