Bug #20569 Garbage in DECIMAL results from some mathematical functions
| Submitted: | 20 Jun 2006 11:15 | Modified: | 24 Jul 2006 17:45 |
|---|---|---|---|
| Reporter: | Giles McArdell | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S1 (Critical) |
| Version: | 5.0.23-BK, 5.0.22 | OS: | Linux (Linux) |
| Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
[20 Jun 2006 11:15]
Giles McArdell
[20 Jun 2006 11:52]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.0.23-BK on Linux: mysql> SELECT (((1 + (1.091147916/100))*(1 + (-1.6147423911/100))) - 1)*100 c; +--------------------------------+ | c | +--------------------------------+ | -0.541213703049256219476000000 | +--------------------------------+ 1 row in set (0.00 sec) mysql> SELECT (((1 + (-1.091147916/100))*(1 + (-1.6147423911/100))) - 1)*100 c; +--------------------------------+ | c | +--------------------------------+ | -2.688271079150743780524000000 | +--------------------------------+ 1 row in set (0.00 sec) mysql> SELECT (((1 + (-1.091147916/100))*(1 + (1.6147423911/100))) - 1)*100 c; +-------------------------------+ | c | +-------------------------------+ | 0.505974818-,+'(+(.0524000000 | +-------------------------------+ 1 row in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.0.23 | +-----------+ 1 row in set (0.00 sec)
[27 Jun 2006 9:06]
Giles McArdell
Another Workaround: If the results of either of the source numbers in the inner multiplication is rounded to 9 decimal places then the garbage is removed, IE: SELECT ( ( ROUND( 1 + (-1.091147916/100),9 )*(1 + (1.6147423911/100) ) ) - 1)*100 c; The result is still not correct but it is close enough for many applications.
[3 Jul 2006 13:24]
Colin McFarlane
We've encountered this bug as well and it's fairly critical for us. Is there an estimate for a fix?
[5 Jul 2006 13:38]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/8765
[5 Jul 2006 15:51]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/8781
[7 Jul 2006 14:27]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/8912
[11 Jul 2006 9:47]
Giles McArdell
Thank you for the fast response. I have re-built my MySQL test installation with the fix in place and the bug is now gone. So it`s back to testing for me.....
[19 Jul 2006 0:02]
Evgeny Potemkin
Adding decimal "digits" in multiplication resulted in signed overflow and producing wrong results. Fixed in 5.0.25
[24 Jul 2006 17:45]
Paul DuBois
Noted in 5.0.25 changelog. Multiplication of DECIMAL values could produce incorrect fractional part and trailing garbage caused by signed overflow.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.059 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.