version bump 0.3.1: handling numbers >= 2**32

new oddities.tsv test
This commit is contained in:
SheetJS 2014-01-12 01:44:07 -05:00
parent e0b3a1e75c
commit 810825d361
6 changed files with 144 additions and 10 deletions

@ -1 +1 @@
./test_files
test_files/*.tsv

@ -23,9 +23,9 @@ frac.cont = function cont(x, D, mixed) {
var B = x * sgn;
var P_2 = 0, P_1 = 1, P = 0;
var Q_2 = 1, Q_1 = 0, Q = 0;
var A = B|0;
var A = Math.floor(B);
while(Q_1 < D) {
A = B|0;
A = Math.floor(B);
P = A * P_1 + P_2;
Q = A * Q_1 + Q_2;
if((B - A) < 0.0000000005) break;

17
frac.md

@ -94,7 +94,13 @@ Note that the variables are implicitly indexed at `k` (so `B` refers to `b_k`):
var B = x * sgn;
var P_2 = 0, P_1 = 1, P = 0;
var Q_2 = 1, Q_1 = 0, Q = 0;
var A = B|0;
```
`A` should be the floor of `B`. Originally the bit-or trick was used, but this is not correct
for the range `B>=2**32`.
```
var A = Math.floor(B);
```
> Iterate
@ -109,7 +115,7 @@ Note that the variables are implicitly indexed at `k` (so `B` refers to `b_k`):
> a_k = [b_k], i.e., the greatest integer <= b_k
```
A = B|0;
A = Math.floor(B);
```
> p_k = a_k p_{k-1} + p_{k-2}
@ -167,7 +173,8 @@ var xltestfiles=[
['xl.00001.tsv', 10000],
['xl.0001.tsv', 10000],
['xl.001.tsv', 10000],
['xl.01.tsv', 10000]
['xl.01.tsv', 10000],
['oddities.tsv', 25]
];
function xlline(o,j,m,w) {
@ -220,7 +227,7 @@ test:
```json>package.json
{
"name": "frac",
"version": "0.3.0",
"version": "0.3.1",
"author": "SheetJS",
"description": "Rational approximation with bounded denominator",
"keywords": [ "math", "fraction", "rational", "approximation" ],
@ -241,7 +248,7 @@ test:
And to make sure that test files are not included in npm:
```>.npmignore
./test_files
test_files/*.tsv
```
```>.gitignore

@ -1,6 +1,6 @@
{
"name": "frac",
"version": "0.3.0",
"version": "0.3.1",
"author": "SheetJS",
"description": "Rational approximation with bounded denominator",
"keywords": [ "math", "fraction", "rational", "approximation" ],

@ -5,7 +5,8 @@ var xltestfiles=[
['xl.00001.tsv', 10000],
['xl.0001.tsv', 10000],
['xl.001.tsv', 10000],
['xl.01.tsv', 10000]
['xl.01.tsv', 10000],
['oddities.tsv', 25]
];
function xlline(o,j,m,w) {

126
test_files/oddities.tsv Normal file

@ -0,0 +1,126 @@
12345678900000 12345678900000 12345678900000 12345678900000
12345678900000.1 12345678900000 12345678900000 1/10 12345678900000 51/512
12345678900000.2 12345678900000 1/5 12345678900000 1/5 12345678900000 51/256
12345678900000.3 12345678900000 1/3 12345678900000 3/10 12345678900000 77/256
12345678900000.4 12345678900000 2/5 12345678900000 2/5 12345678900000 205/512
12345678900000.5 12345678900000 1/2 12345678900000 1/2 12345678900000 1/2
12345678900000.6 12345678900000 3/5 12345678900000 3/5 12345678900000 307/512
12345678900000.7 12345678900000 2/3 12345678900000 7/10 12345678900000 179/256
12345678900000.8 12345678900000 4/5 12345678900000 4/5 12345678900000 205/256
12345678900000.9 12345678900001 12345678900000 9/10 12345678900000 461/512
12345678900001.0 12345678900001 12345678900001 12345678900001
12345678900001.1 12345678900001 12345678900001 1/10 12345678900001 51/512
12345678900001.2 12345678900001 1/5 12345678900001 1/5 12345678900001 51/256
12345678900001.3 12345678900001 1/3 12345678900001 3/10 12345678900001 77/256
12345678900001.4 12345678900001 2/5 12345678900001 2/5 12345678900001 205/512
12345678900001.5 12345678900001 1/2 12345678900001 1/2 12345678900001 1/2
12345678900001.6 12345678900001 3/5 12345678900001 3/5 12345678900001 307/512
12345678900001.7 12345678900001 2/3 12345678900001 7/10 12345678900001 179/256
12345678900001.8 12345678900001 4/5 12345678900001 4/5 12345678900001 205/256
12345678900001.9 12345678900002 12345678900001 9/10 12345678900001 461/512
12345678900002.0 12345678900002 12345678900002 12345678900002
12345678900002.1 12345678900002 12345678900002 1/10 12345678900002 51/512
12345678900002.2 12345678900002 1/5 12345678900002 1/5 12345678900002 51/256
12345678900002.3 12345678900002 1/3 12345678900002 3/10 12345678900002 77/256
12345678900002.4 12345678900002 2/5 12345678900002 2/5 12345678900002 205/512
1234567890000 1234567890000 1234567890000 1234567890000
1234567890000.1 1234567890000 1/9 1234567890000 1/10 1234567890000 1/10
1234567890000.2 1234567890000 1/5 1234567890000 1/5 1234567890000 1/5
1234567890000.3 1234567890000 1/3 1234567890000 3/10 1234567890000 3/10
1234567890000.4 1234567890000 2/5 1234567890000 2/5 1234567890000 2/5
1234567890000.5 1234567890000 1/2 1234567890000 1/2 1234567890000 1/2
1234567890000.6 1234567890000 3/5 1234567890000 3/5 1234567890000 3/5
1234567890000.7 1234567890000 2/3 1234567890000 7/10 1234567890000 7/10
1234567890000.8 1234567890000 4/5 1234567890000 4/5 1234567890000 4/5
1234567890000.9 1234567890000 8/9 1234567890000 9/10 1234567890000 9/10
1234567890001.0 1234567890001 1234567890001 1234567890001
1234567890001.1 1234567890001 1/9 1234567890001 1/10 1234567890001 1/10
1234567890001.2 1234567890001 1/5 1234567890001 1/5 1234567890001 1/5
1234567890001.3 1234567890001 1/3 1234567890001 3/10 1234567890001 3/10
1234567890001.4 1234567890001 2/5 1234567890001 2/5 1234567890001 2/5
1234567890001.5 1234567890001 1/2 1234567890001 1/2 1234567890001 1/2
1234567890001.6 1234567890001 3/5 1234567890001 3/5 1234567890001 3/5
1234567890001.7 1234567890001 2/3 1234567890001 7/10 1234567890001 7/10
1234567890001.8 1234567890001 4/5 1234567890001 4/5 1234567890001 4/5
1234567890001.9 1234567890001 8/9 1234567890001 9/10 1234567890001 9/10
1234567890002.0 1234567890002 1234567890002 1234567890002
1234567890002.1 1234567890002 1/9 1234567890002 1/10 1234567890002 1/10
1234567890002.2 1234567890002 1/5 1234567890002 1/5 1234567890002 1/5
1234567890002.3 1234567890002 1/3 1234567890002 3/10 1234567890002 3/10
1234567890002.4 1234567890002 2/5 1234567890002 2/5 1234567890002 2/5
123456789000 123456789000 123456789000 123456789000
123456789000.1 123456789000 1/9 123456789000 1/10 123456789000 1/10
123456789000.2 123456789000 1/5 123456789000 1/5 123456789000 1/5
123456789000.3 123456789000 1/3 123456789000 3/10 123456789000 3/10
123456789000.4 123456789000 2/5 123456789000 2/5 123456789000 2/5
123456789000.5 123456789000 1/2 123456789000 1/2 123456789000 1/2
123456789000.6 123456789000 3/5 123456789000 3/5 123456789000 3/5
123456789000.7 123456789000 2/3 123456789000 7/10 123456789000 7/10
123456789000.8 123456789000 4/5 123456789000 4/5 123456789000 4/5
123456789000.9 123456789000 8/9 123456789000 9/10 123456789000 9/10
123456789001.0 123456789001 123456789001 123456789001
123456789001.1 123456789001 1/9 123456789001 1/10 123456789001 1/10
123456789001.2 123456789001 1/5 123456789001 1/5 123456789001 1/5
123456789001.3 123456789001 1/3 123456789001 3/10 123456789001 3/10
123456789001.4 123456789001 2/5 123456789001 2/5 123456789001 2/5
123456789001.5 123456789001 1/2 123456789001 1/2 123456789001 1/2
123456789001.6 123456789001 3/5 123456789001 3/5 123456789001 3/5
123456789001.7 123456789001 2/3 123456789001 7/10 123456789001 7/10
123456789001.8 123456789001 4/5 123456789001 4/5 123456789001 4/5
123456789001.9 123456789001 8/9 123456789001 9/10 123456789001 9/10
123456789002.0 123456789002 123456789002 123456789002
123456789002.1 123456789002 1/9 123456789002 1/10 123456789002 1/10
123456789002.2 123456789002 1/5 123456789002 1/5 123456789002 1/5
123456789002.3 123456789002 1/3 123456789002 3/10 123456789002 3/10
123456789002.4 123456789002 2/5 123456789002 2/5 123456789002 2/5
12345678900 12345678900 12345678900 12345678900
12345678900.1 12345678900 1/9 12345678900 1/10 12345678900 1/10
12345678900.2 12345678900 1/5 12345678900 1/5 12345678900 1/5
12345678900.3 12345678900 2/7 12345678900 3/10 12345678900 3/10
12345678900.4 12345678900 2/5 12345678900 2/5 12345678900 2/5
12345678900.5 12345678900 1/2 12345678900 1/2 12345678900 1/2
12345678900.6 12345678900 3/5 12345678900 3/5 12345678900 3/5
12345678900.7 12345678900 5/7 12345678900 7/10 12345678900 7/10
12345678900.8 12345678900 4/5 12345678900 4/5 12345678900 4/5
12345678900.9 12345678900 8/9 12345678900 9/10 12345678900 9/10
12345678901.0 12345678901 12345678901 12345678901
12345678901.1 12345678901 1/9 12345678901 1/10 12345678901 1/10
12345678901.2 12345678901 1/5 12345678901 1/5 12345678901 1/5
12345678901.3 12345678901 2/7 12345678901 3/10 12345678901 3/10
12345678901.4 12345678901 2/5 12345678901 2/5 12345678901 2/5
12345678901.5 12345678901 1/2 12345678901 1/2 12345678901 1/2
12345678901.6 12345678901 3/5 12345678901 3/5 12345678901 3/5
12345678901.7 12345678901 5/7 12345678901 7/10 12345678901 7/10
12345678901.8 12345678901 4/5 12345678901 4/5 12345678901 4/5
12345678901.9 12345678901 8/9 12345678901 9/10 12345678901 9/10
12345678902.0 12345678902 12345678902 12345678902
12345678902.1 12345678902 1/9 12345678902 1/10 12345678902 1/10
12345678902.2 12345678902 1/5 12345678902 1/5 12345678902 1/5
12345678902.3 12345678902 2/7 12345678902 3/10 12345678902 3/10
12345678902.4 12345678902 2/5 12345678902 2/5 12345678902 2/5
1234567890 1234567890 1234567890 1234567890
1234567890.1 1234567890 1234567890 1/10 1234567890 1/10
1234567890.2 1234567890 1/5 1234567890 1/5 1234567890 1/5
1234567890.3 1234567890 2/7 1234567890 3/10 1234567890 3/10
1234567890.4 1234567890 2/5 1234567890 2/5 1234567890 2/5
1234567890.5 1234567890 1/2 1234567890 1/2 1234567890 1/2
1234567890.6 1234567890 3/5 1234567890 3/5 1234567890 3/5
1234567890.7 1234567890 5/7 1234567890 7/10 1234567890 7/10
1234567890.8 1234567890 4/5 1234567890 4/5 1234567890 4/5
1234567890.9 1234567891 1234567890 9/10 1234567890 9/10
1234567891.0 1234567891 1234567891 1234567891
1234567891.1 1234567891 1234567891 1/10 1234567891 1/10
1234567891.2 1234567891 1/5 1234567891 1/5 1234567891 1/5
1234567891.3 1234567891 2/7 1234567891 3/10 1234567891 3/10
1234567891.4 1234567891 2/5 1234567891 2/5 1234567891 2/5
1234567891.5 1234567891 1/2 1234567891 1/2 1234567891 1/2
1234567891.6 1234567891 3/5 1234567891 3/5 1234567891 3/5
1234567891.7 1234567891 5/7 1234567891 7/10 1234567891 7/10
1234567891.8 1234567891 4/5 1234567891 4/5 1234567891 4/5
1234567891.9 1234567892 1234567891 9/10 1234567891 9/10
1234567892.0 1234567892 1234567892 1234567892
1234567892.1 1234567892 1234567892 1/10 1234567892 1/10
1234567892.2 1234567892 1/5 1234567892 1/5 1234567892 1/5
1234567892.3 1234567892 2/7 1234567892 3/10 1234567892 3/10
1234567892.4 1234567892 2/5 1234567892 2/5 1234567892 2/5
1 12345678900000 12345678900000 12345678900000 12345678900000
2 12345678900000.1 12345678900000 12345678900000 1/10 12345678900000 51/512
3 12345678900000.2 12345678900000 1/5 12345678900000 1/5 12345678900000 51/256
4 12345678900000.3 12345678900000 1/3 12345678900000 3/10 12345678900000 77/256
5 12345678900000.4 12345678900000 2/5 12345678900000 2/5 12345678900000 205/512
6 12345678900000.5 12345678900000 1/2 12345678900000 1/2 12345678900000 1/2
7 12345678900000.6 12345678900000 3/5 12345678900000 3/5 12345678900000 307/512
8 12345678900000.7 12345678900000 2/3 12345678900000 7/10 12345678900000 179/256
9 12345678900000.8 12345678900000 4/5 12345678900000 4/5 12345678900000 205/256
10 12345678900000.9 12345678900001 12345678900000 9/10 12345678900000 461/512
11 12345678900001.0 12345678900001 12345678900001 12345678900001
12 12345678900001.1 12345678900001 12345678900001 1/10 12345678900001 51/512
13 12345678900001.2 12345678900001 1/5 12345678900001 1/5 12345678900001 51/256
14 12345678900001.3 12345678900001 1/3 12345678900001 3/10 12345678900001 77/256
15 12345678900001.4 12345678900001 2/5 12345678900001 2/5 12345678900001 205/512
16 12345678900001.5 12345678900001 1/2 12345678900001 1/2 12345678900001 1/2
17 12345678900001.6 12345678900001 3/5 12345678900001 3/5 12345678900001 307/512
18 12345678900001.7 12345678900001 2/3 12345678900001 7/10 12345678900001 179/256
19 12345678900001.8 12345678900001 4/5 12345678900001 4/5 12345678900001 205/256
20 12345678900001.9 12345678900002 12345678900001 9/10 12345678900001 461/512
21 12345678900002.0 12345678900002 12345678900002 12345678900002
22 12345678900002.1 12345678900002 12345678900002 1/10 12345678900002 51/512
23 12345678900002.2 12345678900002 1/5 12345678900002 1/5 12345678900002 51/256
24 12345678900002.3 12345678900002 1/3 12345678900002 3/10 12345678900002 77/256
25 12345678900002.4 12345678900002 2/5 12345678900002 2/5 12345678900002 205/512
26 1234567890000 1234567890000 1234567890000 1234567890000
27 1234567890000.1 1234567890000 1/9 1234567890000 1/10 1234567890000 1/10
28 1234567890000.2 1234567890000 1/5 1234567890000 1/5 1234567890000 1/5
29 1234567890000.3 1234567890000 1/3 1234567890000 3/10 1234567890000 3/10
30 1234567890000.4 1234567890000 2/5 1234567890000 2/5 1234567890000 2/5
31 1234567890000.5 1234567890000 1/2 1234567890000 1/2 1234567890000 1/2
32 1234567890000.6 1234567890000 3/5 1234567890000 3/5 1234567890000 3/5
33 1234567890000.7 1234567890000 2/3 1234567890000 7/10 1234567890000 7/10
34 1234567890000.8 1234567890000 4/5 1234567890000 4/5 1234567890000 4/5
35 1234567890000.9 1234567890000 8/9 1234567890000 9/10 1234567890000 9/10
36 1234567890001.0 1234567890001 1234567890001 1234567890001
37 1234567890001.1 1234567890001 1/9 1234567890001 1/10 1234567890001 1/10
38 1234567890001.2 1234567890001 1/5 1234567890001 1/5 1234567890001 1/5
39 1234567890001.3 1234567890001 1/3 1234567890001 3/10 1234567890001 3/10
40 1234567890001.4 1234567890001 2/5 1234567890001 2/5 1234567890001 2/5
41 1234567890001.5 1234567890001 1/2 1234567890001 1/2 1234567890001 1/2
42 1234567890001.6 1234567890001 3/5 1234567890001 3/5 1234567890001 3/5
43 1234567890001.7 1234567890001 2/3 1234567890001 7/10 1234567890001 7/10
44 1234567890001.8 1234567890001 4/5 1234567890001 4/5 1234567890001 4/5
45 1234567890001.9 1234567890001 8/9 1234567890001 9/10 1234567890001 9/10
46 1234567890002.0 1234567890002 1234567890002 1234567890002
47 1234567890002.1 1234567890002 1/9 1234567890002 1/10 1234567890002 1/10
48 1234567890002.2 1234567890002 1/5 1234567890002 1/5 1234567890002 1/5
49 1234567890002.3 1234567890002 1/3 1234567890002 3/10 1234567890002 3/10
50 1234567890002.4 1234567890002 2/5 1234567890002 2/5 1234567890002 2/5
51 123456789000 123456789000 123456789000 123456789000
52 123456789000.1 123456789000 1/9 123456789000 1/10 123456789000 1/10
53 123456789000.2 123456789000 1/5 123456789000 1/5 123456789000 1/5
54 123456789000.3 123456789000 1/3 123456789000 3/10 123456789000 3/10
55 123456789000.4 123456789000 2/5 123456789000 2/5 123456789000 2/5
56 123456789000.5 123456789000 1/2 123456789000 1/2 123456789000 1/2
57 123456789000.6 123456789000 3/5 123456789000 3/5 123456789000 3/5
58 123456789000.7 123456789000 2/3 123456789000 7/10 123456789000 7/10
59 123456789000.8 123456789000 4/5 123456789000 4/5 123456789000 4/5
60 123456789000.9 123456789000 8/9 123456789000 9/10 123456789000 9/10
61 123456789001.0 123456789001 123456789001 123456789001
62 123456789001.1 123456789001 1/9 123456789001 1/10 123456789001 1/10
63 123456789001.2 123456789001 1/5 123456789001 1/5 123456789001 1/5
64 123456789001.3 123456789001 1/3 123456789001 3/10 123456789001 3/10
65 123456789001.4 123456789001 2/5 123456789001 2/5 123456789001 2/5
66 123456789001.5 123456789001 1/2 123456789001 1/2 123456789001 1/2
67 123456789001.6 123456789001 3/5 123456789001 3/5 123456789001 3/5
68 123456789001.7 123456789001 2/3 123456789001 7/10 123456789001 7/10
69 123456789001.8 123456789001 4/5 123456789001 4/5 123456789001 4/5
70 123456789001.9 123456789001 8/9 123456789001 9/10 123456789001 9/10
71 123456789002.0 123456789002 123456789002 123456789002
72 123456789002.1 123456789002 1/9 123456789002 1/10 123456789002 1/10
73 123456789002.2 123456789002 1/5 123456789002 1/5 123456789002 1/5
74 123456789002.3 123456789002 1/3 123456789002 3/10 123456789002 3/10
75 123456789002.4 123456789002 2/5 123456789002 2/5 123456789002 2/5
76 12345678900 12345678900 12345678900 12345678900
77 12345678900.1 12345678900 1/9 12345678900 1/10 12345678900 1/10
78 12345678900.2 12345678900 1/5 12345678900 1/5 12345678900 1/5
79 12345678900.3 12345678900 2/7 12345678900 3/10 12345678900 3/10
80 12345678900.4 12345678900 2/5 12345678900 2/5 12345678900 2/5
81 12345678900.5 12345678900 1/2 12345678900 1/2 12345678900 1/2
82 12345678900.6 12345678900 3/5 12345678900 3/5 12345678900 3/5
83 12345678900.7 12345678900 5/7 12345678900 7/10 12345678900 7/10
84 12345678900.8 12345678900 4/5 12345678900 4/5 12345678900 4/5
85 12345678900.9 12345678900 8/9 12345678900 9/10 12345678900 9/10
86 12345678901.0 12345678901 12345678901 12345678901
87 12345678901.1 12345678901 1/9 12345678901 1/10 12345678901 1/10
88 12345678901.2 12345678901 1/5 12345678901 1/5 12345678901 1/5
89 12345678901.3 12345678901 2/7 12345678901 3/10 12345678901 3/10
90 12345678901.4 12345678901 2/5 12345678901 2/5 12345678901 2/5
91 12345678901.5 12345678901 1/2 12345678901 1/2 12345678901 1/2
92 12345678901.6 12345678901 3/5 12345678901 3/5 12345678901 3/5
93 12345678901.7 12345678901 5/7 12345678901 7/10 12345678901 7/10
94 12345678901.8 12345678901 4/5 12345678901 4/5 12345678901 4/5
95 12345678901.9 12345678901 8/9 12345678901 9/10 12345678901 9/10
96 12345678902.0 12345678902 12345678902 12345678902
97 12345678902.1 12345678902 1/9 12345678902 1/10 12345678902 1/10
98 12345678902.2 12345678902 1/5 12345678902 1/5 12345678902 1/5
99 12345678902.3 12345678902 2/7 12345678902 3/10 12345678902 3/10
100 12345678902.4 12345678902 2/5 12345678902 2/5 12345678902 2/5
101 1234567890 1234567890 1234567890 1234567890
102 1234567890.1 1234567890 1234567890 1/10 1234567890 1/10
103 1234567890.2 1234567890 1/5 1234567890 1/5 1234567890 1/5
104 1234567890.3 1234567890 2/7 1234567890 3/10 1234567890 3/10
105 1234567890.4 1234567890 2/5 1234567890 2/5 1234567890 2/5
106 1234567890.5 1234567890 1/2 1234567890 1/2 1234567890 1/2
107 1234567890.6 1234567890 3/5 1234567890 3/5 1234567890 3/5
108 1234567890.7 1234567890 5/7 1234567890 7/10 1234567890 7/10
109 1234567890.8 1234567890 4/5 1234567890 4/5 1234567890 4/5
110 1234567890.9 1234567891 1234567890 9/10 1234567890 9/10
111 1234567891.0 1234567891 1234567891 1234567891
112 1234567891.1 1234567891 1234567891 1/10 1234567891 1/10
113 1234567891.2 1234567891 1/5 1234567891 1/5 1234567891 1/5
114 1234567891.3 1234567891 2/7 1234567891 3/10 1234567891 3/10
115 1234567891.4 1234567891 2/5 1234567891 2/5 1234567891 2/5
116 1234567891.5 1234567891 1/2 1234567891 1/2 1234567891 1/2
117 1234567891.6 1234567891 3/5 1234567891 3/5 1234567891 3/5
118 1234567891.7 1234567891 5/7 1234567891 7/10 1234567891 7/10
119 1234567891.8 1234567891 4/5 1234567891 4/5 1234567891 4/5
120 1234567891.9 1234567892 1234567891 9/10 1234567891 9/10
121 1234567892.0 1234567892 1234567892 1234567892
122 1234567892.1 1234567892 1234567892 1/10 1234567892 1/10
123 1234567892.2 1234567892 1/5 1234567892 1/5 1234567892 1/5
124 1234567892.3 1234567892 2/7 1234567892 3/10 1234567892 3/10
125 1234567892.4 1234567892 2/5 1234567892 2/5 1234567892 2/5