Vocabulary/xco
>> << Down to: Dyad Back to: Vocabulary Thru to: Dictionary
x: y Extended Precision
Rank Infinity -- operates on x and y as a whole -- WHY IS THIS IMPORTANT?
Converts number y to extended precision, either extended integer or rational.
If y has integer precision, the result is an extended integer.
]z=: x: 99 99 datatype z extended
If y has floating-point precision, the result is a rational, of which both the numerator and denominator are extended integers.
x: 0.33333333333 33333330575r99999991726 x: 0.333333333333 1r3
x:^:_1, the inverse of x:, converts an extended precision number to a fixed precision (Boolean, integer, or floating-point as appropriate)
3!:0 x:^:_1 ] 1r2 + 1r2 NB. 1 becomes Boolean 1 3!:0 x:^:_1 ] 1r2 + 2r2 NB. 1/2 becomes floating-point 8 3!:0 x:^:_1 ] 1r2 + 3r2 NB. 2 becomes integer 4
However you may find: dyadic x: more convenient than x:^:_1
Common uses
1. Avoid rounding errors in arithmetic with large numbers
] z=: 2^64 1.84467e19 z -: 1+z NB. rounding error loses the increment 1 ] zxco=: (x:2)^64 18446744073709551616 1+zxco NB. no rounding error to lose the increment 18446744073709551617 ] zx=: 2x ^ 64 NB. x-notation produces an identical number 18446744073709551616 1+zx 18446744073709551617 datatype each z ; zx ; zxco +--------+--------+--------+ |floating|extended|extended| +--------+--------+--------+
2. Explore the numerology of pi
dpi=: [: ": [: <.@o. 10 ^ [: x: <: NB. Digits of pi (as a string) ] z=: dpi 770 3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648... $$ pi=: ". 'x',~z NB. Digits of pi as a large number 0 >. 10 ^. pi NB. (Next highest power of 10) > pi 770 _50]\z NB. z in rows of 50 atoms/column 31415926535897932384626433832795028841971693993751 05820974944592307816406286208998628034825342117067 98214808651328230664709384460955058223172535940812 84811174502841027019385211055596446229489549303819 64428810975665933446128475648233786783165271201909 14564856692346034861045432664821339360726024914127 37245870066063155881748815209209628292540917153643 67892590360011330530548820466521384146951941511609 43305727036575959195309218611738193261179310511854 80744623799627495673518857527248912279381830119491 29833673362440656643086021394946395224737190702179 86094370277053921717629317675238467481846766940513 20005681271452635608277857713427577896091736371787 21468440901224953430146549585371050792279689258923 54201995611212902196086403441815981362977477130996 05187072113499999983
NOTE: The six 9s near the end, starting at 762{z are not a bug, but an expected random occurrence. 762{z is known as the Feynman Point. See Chapter 17 of At Play With J by Eugene E. McDonnell.
More information
1. Conversion to rational precision uses tolerant comparison.
Use Fit (x:!.0) for an exact result.
x: ]5 ^~ 1%3 1r243 x:!.0 ]5 ^~ 1%3 37066663599757r9007199254740992
x x: y Num/Denom
Rank Infinity -- operates on x and y as a whole -- WHY IS THIS IMPORTANT?
Converts a number y of any precision to a precision chosen by argument x
]z=: 2 x: 1r3 1 3 datatype z NB. …maybe not what you expect extended
NOTE: Rational numerals such as 2r6 are cancelled out as soon as they are interpreted
2r6 1r3 2 x: 2r6 1 3
Dyad x: is actually a collection of assorted functions for extended precision conversion, the function being chosen by the value of x
x What it does Precision of y Result x x: y 1 Convert to extended precision any same as x: y
Result is extended integer or rational, as appropriate._1 Convert to fixed precision any same as x:^:_1 y, the inverse of x: y
Result is Boolean, integer, or floating point, as appropriate.2 Convert to numerator,denominator form any 2-atom list of (numerator;denominator)
Result has extended precision._2 Convert from numerator,denominator form fixed Same as %/"1 y
Result has floating precision.extended Same as %/"1 y
Result has extended precision.
Common uses
1. Convert extended or rational to floating
_1 x: 1r3 0.333333
2. Convert rational to 2-list: (numerator;denominator)
2 x: 1r3 1 3
3. Convert a number-pair (2-list) y of the form: (a,b) to the number a%b
_2 x: 1 3 0.333333 _2 x: 1 3x NB. HINT for rational result make y extended precision 1r3
Convert a table of number-pairs y likewise
] y=: 3 2$ 1 3 1 5 1 10 1 3 1 5 1 10 _2 x: y 0.333333 0.2 0.1 _2 x: x: y 1r3 1r5 1r10
More Information
1. Conversion to rational precision uses tolerant comparison.
Use Fit (x:!.0) for an exact result
2 x: ]5 ^~ 1%3 1 243 2 x:!.0 ]5 ^~ 1%3 37066663599757 9007199254740992