1023dd3b8Sopenharmony_ciif (typeof T === 'undefined') require('../setup'); 2023dd3b8Sopenharmony_ci 3023dd3b8Sopenharmony_ciT('pow against sqrt', function () { 4023dd3b8Sopenharmony_ci 5023dd3b8Sopenharmony_ci Decimal.config({ 6023dd3b8Sopenharmony_ci toExpNeg: -7, 7023dd3b8Sopenharmony_ci toExpPos: 21, 8023dd3b8Sopenharmony_ci minE: -9e15, 9023dd3b8Sopenharmony_ci maxE: 9e15 10023dd3b8Sopenharmony_ci }); 11023dd3b8Sopenharmony_ci 12023dd3b8Sopenharmony_ci for (var e, n, p, r, s; total < 10000; ) { 13023dd3b8Sopenharmony_ci 14023dd3b8Sopenharmony_ci // Get a random value in the range [0,1) with a random number of significant digits 15023dd3b8Sopenharmony_ci // in the range [1, 40], as a string in exponential format. 16023dd3b8Sopenharmony_ci e = Decimal.random( Math.random() * 40 + 1 | 0 ).toExponential(); 17023dd3b8Sopenharmony_ci 18023dd3b8Sopenharmony_ci // Change exponent to a non-zero value of random length in the range (-9e15, 9e15). 19023dd3b8Sopenharmony_ci r = new Decimal(e.slice(0, e.indexOf('e') + 1) + ( Math.random() < 0.5 ? '-' : '' ) + 20023dd3b8Sopenharmony_ci ( n = Math.floor( Math.random() * 9e15 ) + '' ).slice( Math.random() * n.length | 0 )); 21023dd3b8Sopenharmony_ci //console.log(' r: ' + r); 22023dd3b8Sopenharmony_ci 23023dd3b8Sopenharmony_ci // Random rounding mode. 24023dd3b8Sopenharmony_ci Decimal.rounding = Math.random() * 9 | 0; 25023dd3b8Sopenharmony_ci 26023dd3b8Sopenharmony_ci // Random precision in the range [1, 40]. 27023dd3b8Sopenharmony_ci Decimal.precision = Math.random() * 40 + 1 | 0; 28023dd3b8Sopenharmony_ci 29023dd3b8Sopenharmony_ci p = r.pow(0.5); 30023dd3b8Sopenharmony_ci //console.log(' r.pow(0.5): ' + p); 31023dd3b8Sopenharmony_ci 32023dd3b8Sopenharmony_ci // sqrt is much faster than pow(0.5) 33023dd3b8Sopenharmony_ci s = r.sqrt(); 34023dd3b8Sopenharmony_ci //console.log(' r.sqrt(): ' + s); 35023dd3b8Sopenharmony_ci 36023dd3b8Sopenharmony_ci T.assertEqual(p.valueOf(), s.valueOf()); 37023dd3b8Sopenharmony_ci } 38023dd3b8Sopenharmony_ci}); 39023dd3b8Sopenharmony_ci 40