~ chicken-core (chicken-5) 7367c220e2d48f14b5108c06bdfb1112317544e3
commit 7367c220e2d48f14b5108c06bdfb1112317544e3 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sat Aug 20 03:58:30 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Sat Aug 20 03:58:30 2011 +0200 fixed evaluation-order dependency in division routine diff --git a/runtime.c b/runtime.c index 22ec794f..b8d9c41d 100644 --- a/runtime.c +++ b/runtime.c @@ -6338,7 +6338,7 @@ void C_ccall C_divide(C_word c, C_word closure, C_word k, C_word n1, ...) { va_list v; C_word n2; - C_word iresult; + C_word iresult, n3; int fflag; double fresult, f2; C_alloc_flonum; @@ -6389,8 +6389,11 @@ void C_ccall C_divide(C_word c, C_word closure, C_word k, C_word n1, ...) if((n2 = C_unfix(n1)) == 0) barf(C_DIVISION_BY_ZERO_ERROR, "/"); - if((fresult = (double)iresult / (double)n2) != (iresult /= n2)) + n3 = iresult / n2; + + if((fresult = (double)iresult / (double)n2) != n3) fflag = 1; + else iresult = n3; } } else if(!C_immediatep(n1) && C_block_header(n1) == C_FLONUM_TAG) {Trap