[Rd] longint
Prof Brian Ripley
ripley @ending from @t@t@@ox@@c@uk
Thu Aug 16 20:30:55 CEST 2018
On 16/08/2018 18:33, Hervé Pagès wrote:
> On 08/16/2018 05:12 AM, Dirk Eddelbuettel wrote:
>>
>> On 15 August 2018 at 20:32, Benjamin Tyner wrote:
>> | Thanks for the replies and for confirming my suspicion.
>> |
>> | Interestingly, src/include/S.h uses a trick:
>> |
>> | #define longint int
>> |
>> | and so does the nlme package (within src/init.c).
>>
>> As Bill Dunlap already told you, this is a) ancient and b) was
>> concerned with
>> the int as 16 bit to 32 bit transition period. Ie a long time ago. Old C
>> programmers remember.
>>
>> You should preferably not even use 'long int' on the other side but
>> rely on
>> the fact that all compiler nowadays allow you to specify exactly what
>> size is
>> used via int64_t (long), int32_t (int), ... and the unsigned cousins
Well, not all compilers. Those types were introduced in C99, but are
optional in that standard and in C11 and C++11. I have not checked
C++1[47], but expect they are also optional there. int_fast64_t is not
optional in C99, so R uses that if int64_t is not supported.
[It is easy to overlook that they are optional in C99 and at one time R
assumed them.]
>> (which R
>> does not have). So please receive the value as a int64_t and then
>> cast it to
>> an int32_t -- which corresponds to R's notion of an integer on every
>> platform.
>
> Only on Intel platforms int is 32 bits. Strictly speaking int is only
> required to be >= 16 bits. Who knows what the size of an int is on
> the Sunway TaihuLight for example ;-)
R's configure checks that int is 32 bit and will not compile without it
(src/main/arithmetic.c) ... so int and int32_t are the same on all
platforms where the latter is defined.
--
Brian D. Ripley, ripley using stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford
More information about the R-devel
mailing list