# Haversign Power

## Test runner

Testing in
TestOps/sec
Original
``````Number.prototype.toRad = function() {
return this * Math.PI / 180;
}

var lat2 = 42.741;
var lon2 = -71.3161;
var lat1 = 42.806911;
var lon1 = -71.290611;

var R = 6371; // km
//has a problem with the .toRad() method below.
var x1 = lat2-lat1;
var x2 = lon2-lon1;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;``````
Math.pow
``````Number.prototype.toRad = function() {
return this * Math.PI / 180;
}

var lat2 = 42.741;
var lon2 = -71.3161;
var lat1 = 42.806911;
var lon1 = -71.290611;

var R = 6371; // km
//has a problem with the .toRad() method below.
var x1 = lat2-lat1;
var x2 = lon2-lon1;
var a = Math.pow(Math.sin(dLat/2), 2) +
Math.pow(Math.sin(dLon/2), 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;``````
Store Math.sin reuse
``````Number.prototype.toRad = function() {
return this * Math.PI / 180;
}

var lat2 = 42.741;
var lon2 = -71.3161;
var lat1 = 42.806911;
var lon1 = -71.290611;

var R = 6371; // km
//has a problem with the .toRad() method below.
var x1 = lat2-lat1;
var x2 = lon2-lon1;
var sLat = Math.sin(dLat/2);
var sLon = Math.sin(dLon/2);
var a = sLat * sLat +