in reply to Supporting long long types in XS
1. Use a 32 bit int (i.e. T_IV or T_UV) which has the advantage that any numbers in the 32 bit range can be accurately be represented, but higher numbers cannot be represented at all.
2. Use a floating point number (i.e. T_NV, which is an 8-bitbyte double on my system) which is able to represent the whole range, but not 100% accurately.
3. Create your own type conversion from/to a perl object (i.e. an XS pointer to a long long, in which case you need to provide some mechanism for read/write access, or maybe you can convert from/to Math::BigInt). Probably the most hassle, but you can guarantee precision and range.
Update: I just thought of another way: you can convert from/to a string representation of the number. Should be easy to do, but the perl side of things has to be careful not to accidentally convert it back to a number (float or int). That means you won't be able to do normal arithmatics with it (you'll have to use Math::BigInt or something similar).
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Supporting long long types in XS (NV,PV)
by tye (Sage) on Nov 21, 2006 at 18:29 UTC | |
by Joost (Canon) on Nov 21, 2006 at 20:10 UTC | |
by ikegami (Patriarch) on Nov 21, 2006 at 20:24 UTC | |
by BrowserUk (Patriarch) on Nov 21, 2006 at 20:27 UTC | |
by Anonymous Monk on Nov 21, 2006 at 20:51 UTC | |
by BrowserUk (Patriarch) on Nov 21, 2006 at 22:46 UTC | |
|