Getting OT...
Mea culpa (bis)!
NB.
datatype 1r2
rational
Mike
Roy A. Crabtree wrote:
On 10/22/06, Mike Day <[EMAIL PROTECTED]> wrote:
(T)ouch(e) !
Me culpa. I hadn't realised - or checked - that
"Mea" (tua) culpa. Certes?
integer quotient % integer divisor
is always floating.
Sounds like an Enron argument. Two rationals make a float.
But why?
Qua non?
For example, Dyalog APL retains an integer type for
similar arguments:
#DR 17 @ short integer
83
#DR 548590 556138 1375147 @ long int
323
#DR 548590 556138 1375147 % 17
323
mike
Oleg Kobchenko wrote:
> Well, that's not exactly an improvement
>
> ts'x <[EMAIL PROTECTED] 17'
> 0.19952 2.09723e7
> ts'x (([ - |~) % ]) 17'
> 0.0545567 1.25841e7
>
> ts'x % 17'
> 0.0182892 8.38925e6
> ts'_4 (33 b.) x'
> 0.00982667 4.1952e6
>
> datatype x (([ - |~) % ]) 17
> floating
>
> Maybe a method that represents interger
> division in terms of binary shifts.
If J does not do it, you can; but would it be more efficient?
Similar optimizations are inherently possible for direct rational
arithmetic,
and I suspect that if J does not use them, then usually to nearly always
it will be much less efficient to attempt to use them;
these folks tend to hit it on the nose ...:
(ArB) op (CrD) == (op / reorder( A,B,C,D))
(postpone the operations and utilize binary equality testing or
factoring
to unify
and reduce later operations).
Which blows up in time and space really fast.
>
> Mike Day mike_liz.day at tiscali.co.uk wrote Sat Oct 21 16:18:53 HKT
2006
>
> FWIW, pending J6.02, this offers some improvement in
> time and space:
> NB. in J 6.0.1
> NB. reduce x to an integer multiple of y before divide
> NB. does it work for -ve & +ve x
> (x-300000) (<[EMAIL PROTECTED] -: ([ - |~) % ]) 17
> 1
> ts'x <[EMAIL PROTECTED] 17'
> 0.210536 2.09723e7
> ts'x (([ - |~) % ]) 17'
> 0.0587469 1.25841e7
>
> I expect there's a better way still, and still in 6.01 !
Restate the operations as tuple form to keep the arithmetic rational
at all
times;
this avoids division internally entirely, until/unless you ant to float:
((a idiv b) idiv (c idiv d)) == (a imult d) idiv (b imult c)
representable as:
((a,b) / (c,d)) == ((a*d),(b*c))
which is what I thought rational arithmetic was all about anyway;
so I am confused.
SImilarly for all other functors that have similar identities.
> Mike
>
> Roger Hui wrote:
>
>> Preliminary benchmarks:
>>
>> ts=: 6!:2 , 7!:[EMAIL PROTECTED]
>> x=: 1e6 [EMAIL PROTECTED] 2e6
>> ts 'Expression'
>>
>> Expression J6.02x J6.01 Factor
>> x <[EMAIL PROTECTED] 512 0.0054822 4.19507e6 0.136416 2.09723e7 23.80
5.00
>> x <[EMAIL PROTECTED] 17 0.0213073 4.19507e6 0.154837 2.09723e7 7.27
5.00
>>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm