! thanks ! that's great - so obvious now you mention it.

On 08/07/2011 16:59, Michael Dykman wrote:
> In your example:
>    ]stringNumString   =. x: ". string
>
> ". has already converted your string into a limited precision float
> before it encounters the x: operator.
>
>
> Instead, I suggest that you suffix your string with the extended
> precision suffix, then ". yields the extended precision integer not
> needing the x: operator.
>
> ]string            =. '98765432109876543210'
> ]stringNumString   =.  ". string , 'x'
> 98765432109876543210
>
>
> On Fri, Jul 8, 2011 at 11:47 AM, mijj<[email protected]>  wrote:
>> (second attempt! Version 1 was sent using wrong email addy - d'oh! 8-)
>>
>> [first of all... "hi" .. 8-) .. it's wonderful to be here.  Just a bit
>> uneasy because the forum isn't in the bulletin board form .. anyhoo ..
>> here goes...]
>>
>> i've discovered that i can't directly convert long digit strings to
>> exteneded integer with accuracy beyond usually the first 16 digits but
>> never beyond the first 15 digits (depending on the test string).
>>
>> eg..
>>
>> ]string            =. '98765432109876543210'
>> ]stringNumString   =. x: ". string
>> NB.     98765432109876543488
>> NB. the result is in extended precision form, but the conversion wasn't.
>> NB. being something of a novice, i'm not sure if i'm applying
>> NB. [x:] or [".]correctly.
>> NB. Prefixing [".] doesnt' make any difference.
>>
>> for the same source string i get the same result with
>> J602 on XP32 XP64 Win7(64)
>> J701 on XP64
>> (note: since the blackholed version.1 of this email, my xp64 j602 is
>> giving a different (but consistant) error for the last digits. Other
>> machines still give the old same result.)
>>
>> i can get round this by cobbling together the number from segments
>> i.e ..
>> 0 : 0
>> 'VERB xIntFromLongString DEFINITION AND TEST
>> '=================================
>> )
>> xIntFromLongString    =: 3 : 0
>>    segWidth =. 7        NB. awkward segment test width
>>    nList =. ". |.("1)(-segWidth) ,\ |.y
>> +/ nList * 10x ^ segWidth *i. {. $ nList
>> )
>>
>> ]s =. ,100 20 $ '98765432109876543210'
>> ]n =. xIntFromLongString s
>>
>> (10x^8) | n   NB. look at the last 8 digits of n
>> sns =. ": n
>> */ s = sns    NB. compare s->n->s with original s
>> 0 : 0
>> '=================================
>> 'END OF TEST
>> )
>>
>> .. i only accidentally noticed the failure to do the simple direct
>> conversion of the long digit string when playing with Project Euler prob
>> 13. (Fortunately, the solution only depended upon the first
>> 10 digits of the lines of data.)
>>
>> should i have expected the direct conversion to be limited (eg. is
>> there a warning somewhere i didnt see about (".) applied to long numbers?)?
>> is there a direct way of doing this that, being a novice, i haven't
>> discoverd? (ie. that doesn't involve chopping up the number string)
>>
>>
>> ----------------------------------------------------------------------
>> 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