Skip to content

Commit e29e5ed

Browse files
committed
improve fromString
1 parent 489fb91 commit e29e5ed

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

dist/double.esm.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,14 @@ class Double {
5555
return new Double(oneSqr(a));
5656
}
5757
static fromString(s) {
58-
let isPositive = /^\s*-/.exec(s) === null;
59-
s = s.replace(/^\s*[+-]?/, "");
60-
if (/Infinity.*/.exec(s) !== null)
58+
s = s.trim();
59+
let first = s[0];
60+
let isPositive = first != "-";
61+
if (first == "+" || first == "-")
62+
s = s.slice(1);
63+
if (s.includes("Infinity"))
6164
return isPositive ? Double.Infinity : Double.neg2(Double.Infinity);
62-
let rex = /^([0-9]*\.?[0-9]+)(?:[eE]([-+]?[0-9]+))?/.exec(s);
65+
let rex = /^(\d*\.?\d+)(?:[eE]([-+]?\d+))?/.exec(s);
6366
if (!rex)
6467
return Double.NaN;
6568
let digits = rex[1].replace(".", "");

dist/double.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,14 @@
5757
return new Double(oneSqr(a));
5858
}
5959
static fromString(s) {
60-
let isPositive = /^\s*-/.exec(s) === null;
61-
s = s.replace(/^\s*[+-]?/, "");
62-
if (/Infinity.*/.exec(s) !== null)
60+
s = s.trim();
61+
let first = s[0];
62+
let isPositive = first != "-";
63+
if (first == "+" || first == "-")
64+
s = s.slice(1);
65+
if (s.includes("Infinity"))
6366
return isPositive ? Double.Infinity : Double.neg2(Double.Infinity);
64-
let rex = /^([0-9]*\.?[0-9]+)(?:[eE]([-+]?[0-9]+))?/.exec(s);
67+
let rex = /^(\d*\.?\d+)(?:[eE]([-+]?\d+))?/.exec(s);
6568
if (!rex)
6669
return Double.NaN;
6770
let digits = rex[1].replace(".", "");

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "double.js",
3-
"version": "1.1.2",
3+
"version": "1.1.3",
44
"description": "Emulated float128 or double-double arithmetic. A floating point expansion with 31 accurate decimal digits.",
55
"main": "dist/double.js",
66
"module": "dist/double.esm.js",

src/double.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@ class Double {
6262
static fromMul11(a: float, b: float): Double { return new Double(twoProd(a, b)); }
6363
static fromSqr1(a: float): Double { return new Double(oneSqr(a)); }
6464
static fromString(s: string): Double {
65-
let isPositive = (/^\s*-/.exec(s) === null);
66-
s = s.replace(/^\s*[+-]?/, '');
67-
if (/Infinity.*/.exec(s) !== null) return (isPositive) ? Double.Infinity : Double.neg2(Double.Infinity);
68-
let rex = /^([0-9]*\.?[0-9]+)(?:[eE]([-+]?[0-9]+))?/.exec(s);
65+
s = s.trim();
66+
let first = s[0]
67+
let isPositive = first != '-';
68+
if (first == '+' || first == '-') s = s.slice(1);
69+
if (s.includes('Infinity')) return (isPositive) ? Double.Infinity : Double.neg2(Double.Infinity);
70+
let rex = /^(\d*\.?\d+)(?:[eE]([-+]?\d+))?/.exec(s);
6971
if (!rex) return Double.NaN;
7072

7173
let digits = rex[1].replace('.', '');

0 commit comments

Comments
 (0)