{"ScriptPreparationCode":"function geosailing(latA, lngA, latB, lngB) {\r\n try {\r\n return (Math.acos(Math.sin(Math.atan(Math.tan(latA * (Math.PI / 180)))) * Math.sin(Math.atan(Math.tan(latB * (Math.PI / 180)))) \u002B Math.cos(Math.atan(Math.tan(latA * (Math.PI / 180)))) * Math.cos(Math.atan(Math.tan(latB * (Math.PI / 180)))) * Math.cos(lngA * (Math.PI / 180) - lngB * (Math.PI / 180))) * 6371.008);\r\n } catch {\r\n return 0;\r\n }\r\n}\r\nvar dist_cache = {};\r\n\r\nfunction geosailing2(latA, lngA, latB, lngB) {\r\n if (dist_cache[latA] \u0026\u0026 dist_cache[latA][lngA] \u0026\u0026 dist_cache[latA][lngA][latB] \u0026\u0026 dist_cache[latA][lngA][latB][lngB]) {\r\n return dist_cache[latA][lngA][latB][lngB];\r\n } else {\r\n var dist = Math.acos(Math.sin(Math.atan(Math.tan(latA * (Math.PI / 180)))) * Math.sin(Math.atan(Math.tan(latB * (Math.PI / 180)))) \u002B Math.cos(Math.atan(Math.tan(latA * (Math.PI / 180)))) * Math.cos(Math.atan(Math.tan(latB * (Math.PI / 180)))) * Math.cos(lngA * (Math.PI / 180) - lngB * (Math.PI / 180))) * 6371.008;\r\n if (!dist_cache[latA]) dist_cache[latA] = {};\r\n if (!dist_cache[latA][lngA]) dist_cache[latA][lngA] = {};\r\n if (!dist_cache[latA][lngA][latB]) dist_cache[latA][lngA][latB] = {};\r\n dist_cache[latA][lngA][latB][lngB] = dist;\r\n return dist;\r\n }\r\n}\r\nfunction geosailing3(a,b,c,d){\r\n with(Math)return acos(sin(a*PI/180)*sin(c*PI/180)\u002Bcos(a*PI/180)*cos(c*PI/180)*cos(b*PI/180-d*PI/180))*6371.008\r\n}\r\nfunction geosailing4(a,b,c,d){\r\n with(Math)return acos(sin(a*(i=PI/180))*sin(c*i)\u002Bcos(a*i)*cos(c*i)*cos(b*i-d*i))*6371.008\r\n}\r\nfunction geosailing5(a,b,c,d){\r\n with(Math)return acos(sin(a*=(i=PI/180))*sin(c*=i)\u002Bcos(a)*cos(c)*cos(b*i-d*i))*6371.008\r\n}\r\n const R = Math.PI / 180;\r\n function geosailing6(lat1, lng1, lat2, lng2) {\r\n lat1 *= R;\r\n lng1 *= R;\r\n lat2 *= R;\r\n lng2 *= R;\r\n return 6371 * Math.acos(Math.cos(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1) \u002B Math.sin(lat1) * Math.sin(lat2));\r\n}\r\n function geosailing7(lat1,lon1,lat2,lon2) {\r\n\r\n var dLat = toRad(lon2 - lon1);\r\n var dLon = toRad(lat2 - lat1);\r\n var lat1 = toRad(lon1);\r\n var lat2 = toRad(lon2);\r\n\r\n var a = Math.pow(Math.sin(dLat/2), 2) \u002B\r\n Math.pow(Math.sin(dLon/2), 2) * Math.cos(lat1) * Math.cos(lat2);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\r\n\r\n var R = 6373;\r\n \r\n var distance = R * c;\r\n return distance;\r\n};\r\n\r\nfunction toRad(degree) {\r\n return degree * Math.PI / 180;\r\n}","TestCases":[{"Name":"case1","Code":"geosailing(20.24,50.11,2.88,9.23)","IsDeferred":false},{"Name":"case2","Code":"geosailing2(20.24,50.11,2.88,9.23)","IsDeferred":false},{"Name":"case3","Code":"geosailing3(20.24,50.11,2.88,9.23)","IsDeferred":false},{"Name":"case4","Code":"geosailing4(20.24,50.11,2.88,9.23)","IsDeferred":false},{"Name":"case5","Code":"geosailing5(20.24,50.11,2.88,9.23)","IsDeferred":false},{"Name":"case6","Code":"geosailing6(20.24,50.11,2.88,9.23)","IsDeferred":false},{"Name":"case7","Code":"geosailing7(20.24,50.11,2.88,9.23)","IsDeferred":false}]}