Thread overview | ||||||
---|---|---|---|---|---|---|
|
January 04, 2010 [Issue 3671] New: x^^3 gives wrong result when x is a floating-point literal | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=3671 Summary: x^^3 gives wrong result when x is a floating-point literal Product: D Version: 2.038 Platform: Other OS/Version: All Status: NEW Severity: major Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: bugzilla@kyllingen.net --- Comment #0 from Lars T. Kyllingstad <bugzilla@kyllingen.net> 2010-01-04 03:30:57 PST --- x^^3 evaluates to x^^2 when x is a floating-point literal. writeln(2.0^^3); // prints 4 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 04, 2010 [Issue 3671] x^^3 gives wrong result when x is a floating-point literal | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars T. Kyllingstad | http://d.puremagic.com/issues/show_bug.cgi?id=3671 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugdbug@yahoo.com.au Severity|major |critical --- Comment #1 from Don <clugdbug@yahoo.com.au> 2010-01-04 04:17:59 PST --- Ouch. I don't know what's happened here. The test suite I provided with the patch in bug 3577 doesn't compile! This quick patch fixes the immediate bug reported here, but it still doesn't compile the 3577 test suite. The culprit is the call to typeCombine(). The test needs to be performed before that. Index: expression.c =================================================================== --- expression.c (revision 324) +++ expression.c (working copy) @@ -9965,6 +9971,9 @@ ) && (e1->op == TOKint64 || e1->op == TOKfloat64) ) { + bool wantCube = (e2->op == TOKint64 && e2->toInteger() == 3) + || (e2->op == TOKfloat64 && e2->toReal() == 3.0); + typeCombine(sc); // Replace x^^2 with (tmp = x, tmp*tmp) // Replace x^^3 with (tmp = x, tmp*tmp*tmp) @@ -9973,8 +9982,8 @@ VarExp * ve = new VarExp(loc, tmp); Expression *ae = new DeclarationExp(loc, tmp); Expression *me = new MulExp(loc, ve, ve); - if ( (e2->op == TOKint64 && e2->toInteger() == 3) - || (e2->op == TOKfloat64 && e2->toReal() == 3.0)) + + if ( wantCube) me = new MulExp(loc, me, ve); e = new CommaExp(loc, ae, me); e = e->semantic(sc); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 12, 2010 [Issue 3671] x^^3 gives wrong result when x is a floating-point literal | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars T. Kyllingstad | http://d.puremagic.com/issues/show_bug.cgi?id=3671 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bugzilla@digitalmars.com --- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2010-01-11 22:01:23 PST --- Changeset 332 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 31, 2010 [Issue 3671] x^^3 gives wrong result when x is a floating-point literal | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars T. Kyllingstad | http://d.puremagic.com/issues/show_bug.cgi?id=3671 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #3 from Walter Bright <bugzilla@digitalmars.com> 2010-01-30 22:46:39 PST --- fixed dmd 2.040 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation