https://www.jsoftware.com/help/dictionary/d200.htm says:

"For a non-negative integer y, the phrase x ^ y is equivalent to */y #
x; in particular, */ on an empty list is 1, and x^0 is 1 for any x,
including 0 ."

That turns out to be true only of the values, not of the storage formats:

   exp=: 4 :'*/y#x'
   (3!:0)@exp&>/~0;1;2
1 1 1
1 1 1
1 4 4

That said, it could be argued that the implementation is at fault for
inadequate use of approximations for some examples on a 64 bit
platform, like
   2|536870913^2
0

... but the general case of this gets into a resource constraint. And,
if you do not mind burning extra time, you can instead use:
   2|536870913^2x
1

For more insight into these issues, you might start at:
https://en.wikipedia.org/wiki/Numerical_analysis

Thanks,

-- 
Raul

On Tue, Oct 15, 2019 at 3:19 AM ethiejiesa via Programming
<[email protected]> wrote:
>
> Playing around with type bounds, I just discovered these things about ^ that 
> I don't recall seeing in the documentation:
>
>         9!:14 ''
>     j807/j64nonavx/linux/release/GPL3/voidlinux.org/2019-09-30T12:27:01
>         2&^ 1023 1024
>     8.98847e307 _
>        (3!:0)@^&>/~ 0;1;2
>     4 4 8
>     4 4 8
>     8 8 8
>
> and from j-bot on the IRC channel:
>
>         9!:14 ''
>     j701/2011-01-10/11:25
>        (3!:0)@^&>/~ 0;1;2
>     1 1 8
>     1 1 8
>     4 4 8
>
> So it seems that ^ is producing floats in general. I assume this is why 
> 2^1024 is _ here, since IEEE floats have a maximum exponent of 1023 in their 
> 64-bit binary representation. Does this mean that on 32-bit machines _ = 
> 2^128? I suspect this is something to be aware of if developing 
> cross-platform.
>
> Futhermore, looking at the type tables above, what's going on in the top-left 
> corner? My naive interpretation is that ^ handles boolean arguments 
> specially. I am also curious about the origin of the j701 and j807 difference.
>
> Stepping back a bit though, I also wonder if I am digging around in details 
> that are mostly ignorable (by design). For the most part everything seems to 
> Just Work TM, irrespective of the implicit type conversions, e.g.
>
>         |: (, 3!:0)&-.&> 0;1;(<"0) i.2
>     1 0 1 0
>     1 1 4 4
>
> For which we might say that integer 0 and 1 agree with the boolean arguments 
> because probability complement agrees with boolean Not in these cases.
>
> About the only suprise with types I've actually stumbled upon is with monadic 
> <. and how it handles tolerance differently for real vs. complex arguments, 
> which I posted about in a previous comment.
>
> Does J's implicit type conversion have any other gotchas that one should be 
> aware of?
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to