[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to enter large integers (uint64) without truncation
From: |
Mike Miller |
Subject: |
Re: How to enter large integers (uint64) without truncation |
Date: |
Tue, 29 Nov 2016 15:30:59 -0800 |
User-agent: |
NeoMutt/20161104 (1.7.1) |
On Tue, Nov 29, 2016 at 19:16:21 +0100, Kire Pudsje wrote:
> How to enter large uint64 number in matlab?
>
> >>x = uint64(2626262626262626262)
> x = 2626262626262626304
>
> In hex the numbers are respectively
> 24 72 5B F1 AD 44 AF D6
> 24 72 5B F1 AD 44 B0 00
>
> So the number of significant bits is truncated. Looks like the number first
> is interpreted as being a double, and then converted to uint64.
Right. This is a known limitation of Octave's parser. There has been
some discussion on how to fix it but it is still an open issue in
version 4.2.0.
> As a workaround I enter the number in two parts, which works.
> x = uint64(262626262626262)*10000+6262
> x = 2626262626262626262
>
> Any better way to enter a large constant?
You could also use the `typecast` function to convert an array of
shorter integers into a long integer, for example
>> x = typecast (uint32 ([0xAD44AFD6 0x24725BF1]), "uint64")
x = 2626262626262626262
>> x = typecast (uint8 ([0xD6 0xAF 0x44 0xAD 0xF1 0x5B 0x72 0x24]), "uint64")
x = 2626262626262626262
Personally, if I had to work with uint64 arrays in Octave as it stands
today, I would probably write them to a text file and use the load
command, which does seem to handle uint64 values correctly.
--
mike