Hi Abu, I got the idea for my variation on your script from a forum, where someone is parsing a list of numbers in scientific notation just as you are.
http://www.gamedev.net/community/forums/topic.asp?topic_id=537620&whichpage=1� Until the bug is fixed, here's a workaround: --- #!/usr/bin/perl use strict; use warnings; my $d1 = parse_sci_note('6.892964e-309'); my $d2 = parse_sci_note('1.102874e-307'); my $sum = $d1 + $d2; printf("d1 = %e\n", $d1); printf("d2 = %e\n", $d2); printf("sum = %e\n", $sum); sub parse_sci_note { # argumnet must be a string to work around perl bug my $arg = shift; $arg =~ s/[eE]/\*10\*\*/; return eval($arg); } --- The perl documentation clearly shows scientific notation used here: http://perldoc.perl.org/perldata.html#Scalar-value-constructors so I'd say it definitely is a bug. On Tue, Sep 21, 2010 at 10:25 AM, Abu Yoav <abuy...@gmail.com> wrote: > Hi Jon and Shlomi, > > Thanks! > > Jon: > Actually, in my case, it's a bit more complicated than that. I read the > numbers from a file, and there they are in the standard C notation that I've > used in my example. > > Shlomi: > Thanks for the heads up about how to write good code. I'm still very much a > beginner... > Also, thanks for consulting perl5-porters. If it is a bug, and it is fixed, > then I will indeed port my C code to perl. > > > > On Mon, Sep 20, 2010 at 11:40 PM, Jon Hermansen <jon.herman...@gmail.com> > wrote: >> >> Hi Abu, >> This code works for me: >> >> #!/usr/bin/perl >> >> my $d1, $d2, $sum; >> >> $d1 = 6.892964 * 10 ** -309; >> $d2 = 1.102874 * 10 ** -307; >> >> $sum = $d1 + $d2; >> >> printf("d1 = %e\n", $d1); >> printf("d2 = %e\n", $d2); >> printf("sum = %e\n", $sum); >> >> On Mon, Sep 20, 2010 at 1:30 PM, Abu Yoav <abuy...@gmail.com> wrote: >> > Hi, >> > >> > I wanted to port a small c program to perl. However, the two programs >> > behave >> > differently with respect to very small "double" values. The behavior >> > seems >> > like a bug to me, but since I'm very new to perl, I thought I might ask >> > the >> > list first. >> > >> > Relevant code and output follows. Thanks! >> > >> > --- c code --- >> > #include<stdio.h> >> > >> > int main (int argc, char** argv) >> > { >> > double d1, d2, sum; >> > >> > d1 = 6.892964e-309; >> > d2 = 1.102874e-307; >> > >> > sum = d1 + d2; >> > >> > printf("d1 = %e\n", d1); >> > printf("d2 = %e\n", d2); >> > printf("sum = %e\n", sum); >> > >> > return 0; >> > } >> > >> > --- perl code --- >> > #!/usr/bin/perl >> > >> > my $d1, $d2, $sum; >> > >> > $d1 = "6.892964e-309"; >> > $d2 = "1.102874e-307"; >> > >> > $sum = $d1 + $d2; >> > >> > printf("d1 = %e\n", $d1); >> > printf("d2 = %e\n", $d2); >> > printf("sum = %e\n", $sum); >> > >> > --- c output --- >> > d1 = 6.892964e-309 >> > d2 = 1.102874e-307 >> > sum = 1.171804e-307 >> > >> > --- perl output --- >> > d1 = 0.000000e+00 >> > d2 = 1.000000e-307 >> > sum = 1.000000e-307 >> > > > -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/