syphilis has asked for the wisdom of the Perl Monks concerning the following question:
Note that 'foo($y)' creates the string "1.44115188075868e+17". I need to make it create the same string as 'foo($x)' does - ie "144115188075868217". How do I do that from within the foo() function ? (I'm not interested in solutions that involve fiddling with the perl side of things.)use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'EOC'; int foo(SV * integer) { char * str; str = SvPV_nolen(integer); if(SvIOK(integer)) { printf("IV: %s\n", str); return 1; } if(SvNOK(integer)) { printf("NV: %s\n", str); return 2; } printf("Neither IV nor NV"); return 3; } EOC { use integer; $x = 2 ** 57 + 12345; } $y = 2 ** 57 + 12345; foo($x); foo($y); __END__ Outputs: IV: 144115188075868217 NV: 1.44115188075868e+17
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: XS and -Duse64bitint
by almut (Canon) on Feb 13, 2007 at 11:55 UTC | |
by syphilis (Archbishop) on Feb 13, 2007 at 23:00 UTC | |
|
Re: XS and -Duse64bitint
by Anonymous Monk on Feb 13, 2007 at 09:40 UTC |