Kaydet (Commit) 695671eb authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Avoid inaccurate floating-point computations

...otherwise at least my --disable-dbgutil --disable-debug Linux x86_64 build
failed the CppunitTest_sax_cpputest with 8999999 vs. 9000000 nanoseconds.

Change-Id: I05e0febf413f9f9e01227a0cc4e0f46a5243fe61
üst 0b2bc82f
...@@ -1122,9 +1122,13 @@ bool Converter::convertDuration(util::Duration& rDuration, ...@@ -1122,9 +1122,13 @@ bool Converter::convertDuration(util::Duration& rDuration,
{ {
if (-1 != nTemp) if (-1 != nTemp)
{ {
const sal_Int32 nDigits = std::min<sal_Int32>(nPos - nStart, 9); nNanoSeconds = nTemp;
OSL_ENSURE(nDigits > 0, "bad code monkey: negative digits"); sal_Int32 nDigits = nPos - nStart;
nNanoSeconds=static_cast<double>(nTemp)*(1000000000.0/pow(10.0,nDigits)); assert(nDigits >= 0 && nDigits <= 9);
for (; nDigits < 9; ++nDigits)
{
nNanoSeconds *= 10;
}
nTemp=-1; nTemp=-1;
if ('S' == string[nPos]) if ('S' == string[nPos])
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment