You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Leo Li (JIRA)" <ji...@apache.org> on 2006/11/23 09:26:07 UTC
[jira] Commented: (HARMONY-329) Endless loop when using
Double.parseDouble(String) with certain types of value
[ http://issues.apache.org/jira/browse/HARMONY-329?page=comments#action_12452169 ]
Leo Li commented on HARMONY-329:
--------------------------------
It is a fault of the algorithm in the math lab used by harmony.
In the file trunk/modules/luni/src/main/native/luni/shared/dblparse.c
there is a comment of function doubleAlgorithm:
/* The algorithm for the function doubleAlgorithm() below can be found
* in:
*
* "How to Read Floating-Point Numbers Accurately", William D.
* Clinger, Proceedings of the ACM SIGPLAN '90 Conference on
* Programming Language Design and Implementation, June 20-22,
* 1990, pp. 92-101.
*
* There is a possibility that the function will end up in an endless
* loop if the given approximating floating-point number (a very small
* floating-point whose value is very close to zero) straddles between
* two approximating integer values. We modified the algorithm slightly
* to detect the case where it oscillates back and forth between
* incrementing and decrementing the floating-point approximation. It
* is currently set such that if the oscillation occurs more than twice
* then return the original approximation.
*/
It seems that it will fail in endless loop in the testcase.
Any suggestion?
> Endless loop when using Double.parseDouble(String) with certain types of value
> ------------------------------------------------------------------------------
>
> Key: HARMONY-329
> URL: http://issues.apache.org/jira/browse/HARMONY-329
> Project: Harmony
> Issue Type: Bug
> Components: Classlib
> Reporter: Sian January
>
> Calling Double.parseDouble(..) with certain Strings (e.g. Double.parseDouble("-1.233999999999999965116738099630936817275852021384209929081813042837802886790127428328465579708849276001782791006814286802871737087810957327493372866733334925806221045495205250590286471187577636646208155890426896101636282423463443661040209738873506655844025580428394216030152374941053494694642722606658935546875E-112");) causes an endless loop.
> Although this is not necessarily a case you would see in regular programming it happens when you do something like new BigDecimal(-1.234E-112).doubleValue(), which was the cause of the endless loop mentioned in HARMONY-319.
> The loop occurs in the native method "doubleAlgorithm (JNIEnv * env, U_64 * f, IDATA length, jint e, jdouble z)" in native-src/shared/math/dblparse.c.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira