1
0
mirror of https://github.com/MikeMcl/decimal.js.git synced 2026-09-22 11:54:45 +00:00

Merge pull request #260 from apoorva-01/fix-asin-cancellation-near-1

Fix asin losing precision near x = 1
This commit is contained in:
Michael M
2026-07-14 00:00:15 +01:00
committed by GitHub
3 changed files with 10 additions and 2 deletions

View File

@@ -936,7 +936,8 @@
Ctor.precision = pr + 6;
Ctor.rounding = 1;
x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();
// See https://github.com/MikeMcl/decimal.js/issues/249
x = x.div(new Ctor(1).minus(x).times(new Ctor(1).plus(x)).sqrt().plus(1)).atan();
Ctor.precision = pr;
Ctor.rounding = rm;

View File

@@ -932,7 +932,8 @@ P.inverseSine = P.asin = function () {
Ctor.precision = pr + 6;
Ctor.rounding = 1;
x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();
// See https://github.com/MikeMcl/decimal.js/issues/249
x = x.div(new Ctor(1).minus(x).times(new Ctor(1).plus(x)).sqrt().plus(1)).atan();
Ctor.precision = pr;
Ctor.rounding = rm;

View File

@@ -69,6 +69,12 @@ T('asin', function () {
t('-0.5110799', 65, 2, '-0.53644070128325494453237503822033662227949443391067147724566337039');
t('-0.579334355419195148', 31, 3, '-0.617911801796609232511609252874');
// Arguments very close to 1. See https://github.com/MikeMcl/decimal.js/issues/249
t('0.9999999999999999995', 31, 1, '1.570796325794896619231321691598');
t('0.99999999999999999999995', 36, 6, '1.5707963267848966192313216916397514');
t('-0.9999999999999999999', 30, 4, '-1.57079632634768302373136375235');
t('0.99999999999999999999999999999', 45, 0, '1.57079632679489214709536669206035862375124724');
/*
t('0.63', 1, 5, '0.7');
t('-0.42', 4, 0, '-0.4335');