SQLite Forum

Decimal128
Login
So if you add 999476637.6 together 1 million times, you get 999476637600000.0 which has an epsilon of 0.125.

What is your point?  As long as the epsilon of all intermediates/results are less that 1e-4 then all intermediates/results are valid "to the penny" (when rounded nearest, ties to even).

This simple mathematical truth cannot be changed no matter how much you might wish it were not so.

This applies to all binary floating point formats from Half-Precision to Octuple Precision.

```
qlite> select value-3, pow(10,value-3), epsilon(pow(10,value-3)) from wholenumber where value between 0 and 18;
┌─────────┬───────────────────┬──────────────────────────┐
│ value-3 │  pow(10,value-3)  │ epsilon(pow(10,value-3)) │
├─────────┼───────────────────┼──────────────────────────┤
│ -2      │ 0.01              │ 1.73472347597681e-18     │
│ -1      │ 0.1               │ 1.38777878078145e-17     │
│ 0       │ 1.0               │ 2.22044604925031e-16     │
│ 1       │ 10.0              │ 1.77635683940025e-15     │
│ 2       │ 100.0             │ 1.4210854715202e-14      │
│ 3       │ 1000.0            │ 1.13686837721616e-13     │
│ 4       │ 10000.0           │ 1.81898940354586e-12     │
│ 5       │ 100000.0          │ 1.45519152283669e-11     │
│ 6       │ 1000000.0         │ 1.16415321826935e-10     │
│ 7       │ 10000000.0        │ 1.86264514923096e-09     │
│ 8       │ 100000000.0       │ 1.49011611938477e-08     │
│ 9       │ 1000000000.0      │ 1.19209289550781e-07     │
│ 10      │ 10000000000.0     │ 1.9073486328125e-06      │
│ 11      │ 100000000000.0    │ 1.52587890625e-05        │
│ 12      │ 1000000000000.0   │ 0.0001220703125          │
│ 13      │ 10000000000000.0  │ 0.001953125              │
│ 14      │ 100000000000000.0 │ 0.015625                 │
│ 15      │ 1.0e+15           │ 0.125                    │
└─────────┴───────────────────┴──────────────────────────┘
```

So as long as all values/intermediates/results are of a magnitude than 1e11 (for Binary64 Floating Point) you are assured that the rounded nearest half-to-even 2 decimal place result is perfectly accurate.

For "extended precision" it is bigger, at 1e15

```
sqlite> select value-3, pow(10,value-3), epsilon(pow(10,value-3),64) from wholenumber where value between 0 and 17;
┌─────────┬───────────────────┬─────────────────────────────┐
│ value-3 │  pow(10,value-3)  │ epsilon(pow(10,value-3),64) │
├─────────┼───────────────────┼─────────────────────────────┤
│ -2      │ 0.01              │ 8.470329472543e-22          │
│ -1      │ 0.1               │ 6.7762635780344e-21         │
│ 0       │ 1.0               │ 1.0842021724855e-19         │
│ 1       │ 10.0              │ 8.67361737988404e-19        │
│ 2       │ 100.0             │ 6.93889390390723e-18        │
│ 3       │ 1000.0            │ 5.55111512312578e-17        │
│ 4       │ 10000.0           │ 8.88178419700125e-16        │
│ 5       │ 100000.0          │ 7.105427357601e-15          │
│ 6       │ 1000000.0         │ 5.6843418860808e-14         │
│ 7       │ 10000000.0        │ 9.09494701772928e-13        │
│ 8       │ 100000000.0       │ 7.27595761418343e-12        │
│ 9       │ 1000000000.0      │ 5.82076609134674e-11        │
│ 10      │ 10000000000.0     │ 9.31322574615479e-10        │
│ 11      │ 100000000000.0    │ 7.45058059692383e-09        │
│ 12      │ 1000000000000.0   │ 5.96046447753906e-08        │
│ 13      │ 10000000000000.0  │ 9.5367431640625e-07         │
│ 14      │ 100000000000000.0 │ 7.62939453125e-06           │
│ 15      │ 1.0e+15           │ 6.103515625e-05             │
│ 16      │ 1.0e+16           │ 0.0009765625                │
│ 17      │ 1.0e+17           │ 0.0078125                   │
└─────────┴───────────────────┴─────────────────────────────┘
```

Similarly for Binary128 it is 1e29

```
sqlite> select value-3, pow(10,value-3), epsilon(pow(10,value-3),113) from wholenumber where value between 0 and 34;
┌─────────┬───────────────────┬──────────────────────────────┐
│ value-3 │  pow(10,value-3)  │ epsilon(pow(10,value-3),113) │
├─────────┼───────────────────┼──────────────────────────────┤
│ -2      │ 0.01              │ 1.50463276905253e-36         │
│ -1      │ 0.1               │ 1.20370621524202e-35         │
│ 0       │ 1.0               │ 1.92592994438724e-34         │
│ 1       │ 10.0              │ 1.54074395550979e-33         │
│ 2       │ 100.0             │ 1.23259516440783e-32         │
│ 3       │ 1000.0            │ 9.86076131526265e-32         │
│ 4       │ 10000.0           │ 1.57772181044202e-30         │
│ 5       │ 100000.0          │ 1.26217744835362e-29         │
│ 6       │ 1000000.0         │ 1.0097419586829e-28          │
│ 7       │ 10000000.0        │ 1.61558713389263e-27         │
│ 8       │ 100000000.0       │ 1.29246970711411e-26         │
│ 9       │ 1000000000.0      │ 1.03397576569128e-25         │
│ 10      │ 10000000000.0     │ 1.65436122510606e-24         │
│ 11      │ 100000000000.0    │ 1.32348898008484e-23         │
│ 12      │ 1000000000000.0   │ 1.05879118406788e-22         │
│ 13      │ 10000000000000.0  │ 1.6940658945086e-21          │
│ 14      │ 100000000000000.0 │ 1.35525271560688e-20         │
│ 15      │ 1.0e+15           │ 1.0842021724855e-19          │
│ 16      │ 1.0e+16           │ 1.73472347597681e-18         │
│ 17      │ 1.0e+17           │ 1.38777878078145e-17         │
│ 18      │ 1.0e+18           │ 1.11022302462516e-16         │
│ 19      │ 1.0e+19           │ 1.77635683940025e-15         │
│ 20      │ 1.0e+20           │ 1.4210854715202e-14          │
│ 21      │ 1.0e+21           │ 1.13686837721616e-13         │
│ 22      │ 1.0e+22           │ 1.81898940354586e-12         │
│ 23      │ 1.0e+23           │ 1.45519152283669e-11         │
│ 24      │ 1.0e+24           │ 1.16415321826935e-10         │
│ 25      │ 1.0e+25           │ 1.86264514923096e-09         │
│ 26      │ 1.0e+26           │ 1.49011611938477e-08         │
│ 27      │ 1.0e+27           │ 1.19209289550781e-07         │
│ 28      │ 1.0e+28           │ 1.9073486328125e-06          │
│ 29      │ 1.0e+29           │ 1.52587890625e-05            │
│ 30      │ 1.0e+30           │ 0.0001220703125              │
│ 31      │ 1.0e+31           │ 0.0009765625                 │
└─────────┴───────────────────┴──────────────────────────────┘
```

And for Binary256 it would be 1e67

```
sqlite> select value-3, pow(10,value-3), epsilon(pow(10,value-3),237) from wholenumber where value between 0 and 73;
┌─────────┬───────────────────┬──────────────────────────────┐
│ value-3 │  pow(10,value-3)  │ epsilon(pow(10,value-3),237) │
├─────────┼───────────────────┼──────────────────────────────┤
│ -2      │ 0.01              │ 7.07474928033337e-74         │
│ -1      │ 0.1               │ 5.6597994242667e-73          │
│ 0       │ 1.0               │ 9.05567907882671e-72         │
│ 1       │ 10.0              │ 7.24454326306137e-71         │
│ 2       │ 100.0             │ 5.7956346104491e-70          │
│ 3       │ 1000.0            │ 4.63650768835928e-69         │
│ 4       │ 10000.0           │ 7.41841230137484e-68         │
│ 5       │ 100000.0          │ 5.93472984109987e-67         │
│ 6       │ 1000000.0         │ 4.7477838728799e-66          │
│ 7       │ 10000000.0        │ 7.59645419660784e-65         │
│ 8       │ 100000000.0       │ 6.07716335728627e-64         │
│ 9       │ 1000000000.0      │ 4.86173068582902e-63         │
│ 10      │ 10000000000.0     │ 7.77876909732643e-62         │
│ 11      │ 100000000000.0    │ 6.22301527786114e-61         │
│ 12      │ 1000000000000.0   │ 4.97841222228891e-60         │
│ 13      │ 10000000000000.0  │ 7.96545955566226e-59         │
│ 14      │ 100000000000000.0 │ 6.37236764452981e-58         │
│ 15      │ 1.0e+15           │ 5.09789411562385e-57         │
│ 16      │ 1.0e+16           │ 8.15663058499816e-56         │
│ 17      │ 1.0e+17           │ 6.52530446799852e-55         │
│ 18      │ 1.0e+18           │ 5.22024357439882e-54         │
│ 19      │ 1.0e+19           │ 8.35238971903811e-53         │
│ 20      │ 1.0e+20           │ 6.68191177523049e-52         │
│ 21      │ 1.0e+21           │ 5.34552942018439e-51         │
│ 22      │ 1.0e+22           │ 8.55284707229503e-50         │
│ 23      │ 1.0e+23           │ 6.84227765783602e-49         │
│ 24      │ 1.0e+24           │ 5.47382212626882e-48         │
│ 25      │ 1.0e+25           │ 8.75811540203011e-47         │
│ 26      │ 1.0e+26           │ 7.00649232162409e-46         │
│ 27      │ 1.0e+27           │ 5.60519385729927e-45         │
│ 28      │ 1.0e+28           │ 8.96831017167883e-44         │
│ 29      │ 1.0e+29           │ 7.17464813734306e-43         │
│ 30      │ 1.0e+30           │ 5.73971850987445e-42         │
│ 31      │ 1.0e+31           │ 4.59177480789956e-41         │
│ 32      │ 1.0e+32           │ 7.3468396926393e-40          │
│ 33      │ 1.0e+33           │ 5.87747175411144e-39         │
│ 34      │ 1.0e+34           │ 4.70197740328915e-38         │
│ 35      │ 1.0e+35           │ 7.52316384526264e-37         │
│ 36      │ 1.0e+36           │ 6.01853107621011e-36         │
│ 37      │ 1.0e+37           │ 4.81482486096809e-35         │
│ 38      │ 1.0e+38           │ 7.70371977754894e-34         │
│ 39      │ 1.0e+39           │ 6.16297582203915e-33         │
│ 40      │ 1.0e+40           │ 4.93038065763132e-32         │
│ 41      │ 1.0e+41           │ 7.88860905221012e-31         │
│ 42      │ 1.0e+42           │ 6.31088724176809e-30         │
│ 43      │ 1.0e+43           │ 5.04870979341448e-29         │
│ 44      │ 1.0e+44           │ 8.07793566946316e-28         │
│ 45      │ 1.0e+45           │ 6.46234853557053e-27         │
│ 46      │ 1.0e+46           │ 5.16987882845642e-26         │
│ 47      │ 1.0e+47           │ 8.27180612553028e-25         │
│ 48      │ 1.0e+48           │ 6.61744490042422e-24         │
│ 49      │ 1.0e+49           │ 5.29395592033938e-23         │
│ 50      │ 1.0e+50           │ 8.470329472543e-22           │
│ 51      │ 1.0e+51           │ 6.7762635780344e-21          │
│ 52      │ 1.0e+52           │ 5.42101086242752e-20         │
│ 53      │ 1.0e+53           │ 8.67361737988404e-19         │
│ 54      │ 1.0e+54           │ 6.93889390390723e-18         │
│ 55      │ 1.0e+55           │ 5.55111512312578e-17         │
│ 56      │ 1.0e+56           │ 8.88178419700125e-16         │
│ 57      │ 1.0e+57           │ 7.105427357601e-15           │
│ 58      │ 1.0e+58           │ 5.6843418860808e-14          │
│ 59      │ 1.0e+59           │ 4.54747350886464e-13         │
│ 60      │ 1.0e+60           │ 7.27595761418343e-12         │
│ 61      │ 1.0e+61           │ 5.82076609134674e-11         │
│ 62      │ 1.0e+62           │ 4.65661287307739e-10         │
│ 63      │ 1.0e+63           │ 7.45058059692383e-09         │
│ 64      │ 1.0e+64           │ 5.96046447753906e-08         │
│ 65      │ 1.0e+65           │ 4.76837158203125e-07         │
│ 66      │ 1.0e+66           │ 7.62939453125e-06            │
│ 67      │ 1.0e+67           │ 6.103515625e-05              │
│ 68      │ 1.0e+68           │ 0.00048828125                │
│ 69      │ 1.0e+69           │ 0.0078125                    │
│ 70      │ 1.0e+70           │ 0.0625                       │
└─────────┴───────────────────┴──────────────────────────────┘
```