The rational numbers are exact.
 
([:+/\|.)^:(i.5)1 1
1 1
1 2
2 3
3 5
5 8
fr=: 13 :'%/"1([:+/\|.)^:(i.y)1 1'
(,.0j25":"0 fr 20);' ';x:,.fr 20
┌───────────────────────────┬─┬──────────┐
│1.0000000000000000000000000│ │ 1│
│0.5000000000000000000000000│ │ 1r2│
│0.6666666666666666300000000│ │ 2r3│
│0.5999999999999999800000000│ │ 3r5│
│0.6250000000000000000000000│ │ 5r8│
│0.6153846153846154200000000│ │ 8r13│
│0.6190476190476190700000000│ │ 13r21│
│0.6176470588235294400000000│ │ 21r34│
│0.6181818181818181700000000│ │ 34r55│
│0.6179775280898876000000000│ │ 55r89│
│0.6180555555555555800000000│ │ 89r144│
│0.6180257510729614300000000│ │ 144r233│
│0.6180371352785145600000000│ │ 233r377│
│0.6180327868852458800000000│ │ 377r610│
│0.6180344478216818200000000│ │ 610r987│
│0.6180338134001252000000000│ │ 987r1597│
│0.6180340557275542100000000│ │ 1597r2584│
│0.6180339631667065600000000│ │ 2584r4181│
│0.6180339985218034100000000│ │ 4181r6765│
│0.6180339850173579600000000│ │6765r10946│
└───────────────────────────┴─┴──────────┘
 
Linda
 


-----Original Message-----
From: Programming <programming-boun...@forums.jsoftware.com> On Behalf Of 
William Tanksley, Jr
Sent: Friday, March 29, 2019 12:23 PM
To: Programming forum <programm...@jsoftware.com>
Subject: Re: [Jprogramming] converting from 'floating' to 'rational'

Ian Clark <earthspo...@gmail.com> wrote:
> But why should I feel obliged to carry on using lossy methods when 
> I've just discovered I don't need to? Methods such as floating point 
> arithmetic, plus truncation of infinite series at some arbitrary 
> point. The fact that few practical measurements are made to an 
> accuracy greater than 0.01% doesn't actually justify lossy methods in 
> the calculating machine. It merely condones them, which is something else 
> entirely.

There will be a cost, of course. Supporting arbitrarily small and large numbers 
changes the time characteristics of the computations in ways that will depend 
on the log-size of the numbers -- and of course will blow the CPU's caching. 
Also, because the intermediate values are being stored with unlimited 
precision, you may find some surprises, such as values close to 1 which have 
enormous numerators and denominators.

IMO it's a worthy experiment, especially if you wind up gathering data about 
the cost and benefit.

There's some interesting reflections going on about this on the "unums" mailing 
list. The trouble with indefinite precision rationals is that they are overkill 
for all of the problems where they're actually needed, since the inputs and the 
solution will normally need to be expressed to only finite digits. Now, I don't 
think this makes doing experiments with them worthless; far from it. By 
tracking things like the smallest expected input (for example the smallest 
triangle side, or the largest ratio between sides) and the largest integer 
generated as intermediate value (perhaps also tracking the ratio in which this 
integer appeared), we can wind up answering how bad things can get (of course, 
this is the task of numerical analysis).

Ulrich Kulisch developed technology called the "super-accumulator", which was 
supposed to function alongside the usual group of floating-point registers. It 
stored an overkill number of bits to permit it to accumulate multiple additions 
of products of arbitrary floats, the sort of operations you need to evaluate 
polynomials and linear algebra.  Using this, he was able to show that a large 
number of operations which were considered unstable were possible to stabilize 
by providing this unrounded accumulator. In the end this wasn't made part of 
the IEEE standard, but it's being included in some of the numerical systems 
being developed in response to the need for more flexible floating point 
formats from the machine-learning world, where smaller-bitwidth floating point 
numbers both make stability a serious concern and also make the required size 
of the superaccumulator much smaller.

> Ian Clark

-Wm
----------------------------------------------------------------------
For information about J forums see 
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&amp;data=02%7C01%7C%7Cdd9b991445bd4aee1e7a08d6b462d9c2%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636894733979469996&amp;sdata=0uEWVVEQ3RUboB2xRtJgdxL%2FUSZGkeff1L9HAEGmhYM%3D&amp;reserved=0
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to