| Line | Source Code | Coverage |
|---|
| 1 | /**************************************************************************** | - |
| 2 | ** | - |
| 3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
| 4 | ** Contact: http://www.qt-project.org/legal | - |
| 5 | ** | - |
| 6 | ** This file is part of the QtCore module of the Qt Toolkit. | - |
| 7 | ** | - |
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ | - |
| 9 | ** Commercial License Usage | - |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in | - |
| 11 | ** accordance with the commercial license agreement provided with the | - |
| 12 | ** Software or, alternatively, in accordance with the terms contained in | - |
| 13 | ** a written agreement between you and Digia. For licensing terms and | - |
| 14 | ** conditions see http://qt.digia.com/licensing. For further information | - |
| 15 | ** use the contact form at http://qt.digia.com/contact-us. | - |
| 16 | ** | - |
| 17 | ** GNU Lesser General Public License Usage | - |
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - |
| 19 | ** General Public License version 2.1 as published by the Free Software | - |
| 20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | - |
| 21 | ** packaging of this file. Please review the following information to | - |
| 22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | - |
| 23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | - |
| 24 | ** | - |
| 25 | ** In addition, as a special exception, Digia gives you certain additional | - |
| 26 | ** rights. These rights are described in the Digia Qt LGPL Exception | - |
| 27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | - |
| 28 | ** | - |
| 29 | ** GNU General Public License Usage | - |
| 30 | ** Alternatively, this file may be used under the terms of the GNU | - |
| 31 | ** General Public License version 3.0 as published by the Free Software | - |
| 32 | ** Foundation and appearing in the file LICENSE.GPL included in the | - |
| 33 | ** packaging of this file. Please review the following information to | - |
| 34 | ** ensure the GNU General Public License version 3.0 requirements will be | - |
| 35 | ** met: http://www.gnu.org/copyleft/gpl.html. | - |
| 36 | ** | - |
| 37 | ** | - |
| 38 | ** $QT_END_LICENSE$ | - |
| 39 | ** | - |
| 40 | ****************************************************************************/ | - |
| 41 | | - |
| 42 | #include "qlocale_tools_p.h" | - |
| 43 | #include "qlocale_p.h" | - |
| 44 | #include "qstring.h" | - |
| 45 | | - |
| 46 | #include <ctype.h> | - |
| 47 | #include <float.h> | - |
| 48 | #include <limits.h> | - |
| 49 | #include <math.h> | - |
| 50 | #include <stdlib.h> | - |
| 51 | #include <time.h> | - |
| 52 | | - |
| 53 | #ifdef Q_OS_WINCE | - |
| 54 | # include "qfunctions_wince.h" // for _control87 | - |
| 55 | #endif | - |
| 56 | | - |
| 57 | #if defined(Q_OS_LINUX) && !defined(__UCLIBC__) | - |
| 58 | # include <fenv.h> | - |
| 59 | #endif | - |
| 60 | | - |
| 61 | // Sizes as defined by the ISO C99 standard - fallback | - |
| 62 | #ifndef LLONG_MAX | - |
| 63 | # define LLONG_MAX Q_INT64_C(0x7fffffffffffffff) | - |
| 64 | #endif | - |
| 65 | #ifndef LLONG_MIN | - |
| 66 | # define LLONG_MIN (-LLONG_MAX - Q_INT64_C(1)) | - |
| 67 | #endif | - |
| 68 | #ifndef ULLONG_MAX | - |
| 69 | # define ULLONG_MAX Q_UINT64_C(0xffffffffffffffff) | - |
| 70 | #endif | - |
| 71 | | - |
| 72 | QT_BEGIN_NAMESPACE | - |
| 73 | | - |
| 74 | #ifndef QT_QLOCALE_USES_FCVT | - |
| 75 | static char *_qdtoa( NEEDS_VOLATILE double d, int mode, int ndigits, int *decpt, | - |
| 76 | int *sign, char **rve, char **digits_str); | - |
| 77 | #endif | - |
| 78 | | - |
| 79 | QString qulltoa(qulonglong l, int base, const QChar _zero) | - |
| 80 | { | - |
| 81 | ushort buff[65]; // length of MAX_ULLONG in base 2 executed (the execution status of this line is deduced): ushort buff[65]; | - |
| 82 | ushort *p = buff + 65; executed (the execution status of this line is deduced): ushort *p = buff + 65; | - |
| 83 | | - |
| 84 | if (base != 10 || _zero.unicode() == '0') { evaluated: base != 10| yes Evaluation Count:17830 | yes Evaluation Count:12274871 |
partially evaluated: _zero.unicode() == '0'| yes Evaluation Count:12274873 | no Evaluation Count:0 |
| 0-12274873 |
| 85 | while (l != 0) { evaluated: l != 0| yes Evaluation Count:21890873 | yes Evaluation Count:12292692 |
| 12292692-21890873 |
| 86 | int c = l % base; executed (the execution status of this line is deduced): int c = l % base; | - |
| 87 | | - |
| 88 | --p; executed (the execution status of this line is deduced): --p; | - |
| 89 | | - |
| 90 | if (c < 10) evaluated: c < 10| yes Evaluation Count:21861624 | yes Evaluation Count:29248 |
| 29248-21861624 |
| 91 | *p = '0' + c; executed: *p = '0' + c;Execution Count:21861622 | 21861622 |
| 92 | else | - |
| 93 | *p = c - 10 + 'a'; executed: *p = c - 10 + 'a';Execution Count:29248 | 29248 |
| 94 | | - |
| 95 | l /= base; executed (the execution status of this line is deduced): l /= base; | - |
| 96 | } executed: }Execution Count:21890872 | 21890872 |
| 97 | } executed: }Execution Count:12292693 | 12292693 |
| 98 | else { | - |
| 99 | while (l != 0) { | 0 |
| 100 | int c = l % base; never executed (the execution status of this line is deduced): int c = l % base; | - |
| 101 | | - |
| 102 | *(--p) = _zero.unicode() + c; never executed (the execution status of this line is deduced): *(--p) = _zero.unicode() + c; | - |
| 103 | | - |
| 104 | l /= base; never executed (the execution status of this line is deduced): l /= base; | - |
| 105 | } | 0 |
| 106 | } | 0 |
| 107 | | - |
| 108 | return QString(reinterpret_cast<QChar *>(p), 65 - (p - buff)); executed: return QString(reinterpret_cast<QChar *>(p), 65 - (p - buff));Execution Count:12292693 | 12292693 |
| 109 | } | - |
| 110 | | - |
| 111 | QString qlltoa(qlonglong l, int base, const QChar zero) | - |
| 112 | { | - |
| 113 | return qulltoa(l < 0 ? -l : l, base, zero); executed: return qulltoa(l < 0 ? -l : l, base, zero);Execution Count:12249825 | 12249825 |
| 114 | } | - |
| 115 | | - |
| 116 | QString &decimalForm(QChar zero, QChar decimal, QChar group, | - |
| 117 | QString &digits, int decpt, uint precision, | - |
| 118 | PrecisionMode pm, | - |
| 119 | bool always_show_decpt, | - |
| 120 | bool thousands_group) | - |
| 121 | { | - |
| 122 | if (decpt < 0) { evaluated: decpt < 0| yes Evaluation Count:18517 | yes Evaluation Count:1418491 |
| 18517-1418491 |
| 123 | for (int i = 0; i < -decpt; ++i) evaluated: i < -decpt| yes Evaluation Count:46371 | yes Evaluation Count:18517 |
| 18517-46371 |
| 124 | digits.prepend(zero); executed: digits.prepend(zero);Execution Count:46371 | 46371 |
| 125 | decpt = 0; executed (the execution status of this line is deduced): decpt = 0; | - |
| 126 | } executed: }Execution Count:18517 | 18517 |
| 127 | else if (decpt > digits.length()) { evaluated: decpt > digits.length()| yes Evaluation Count:378781 | yes Evaluation Count:1039710 |
| 378781-1039710 |
| 128 | for (int i = digits.length(); i < decpt; ++i) evaluated: i < decpt| yes Evaluation Count:522776 | yes Evaluation Count:378781 |
| 378781-522776 |
| 129 | digits.append(zero); executed: digits.append(zero);Execution Count:522776 | 522776 |
| 130 | } executed: }Execution Count:378781 | 378781 |
| 131 | | - |
| 132 | if (pm == PMDecimalDigits) { evaluated: pm == PMDecimalDigits| yes Evaluation Count:1629 | yes Evaluation Count:1435379 |
| 1629-1435379 |
| 133 | uint decimal_digits = digits.length() - decpt; executed (the execution status of this line is deduced): uint decimal_digits = digits.length() - decpt; | - |
| 134 | for (uint i = decimal_digits; i < precision; ++i) evaluated: i < precision| yes Evaluation Count:7031 | yes Evaluation Count:1629 |
| 1629-7031 |
| 135 | digits.append(zero); executed: digits.append(zero);Execution Count:7031 | 7031 |
| 136 | } executed: }Execution Count:1629 | 1629 |
| 137 | else if (pm == PMSignificantDigits) { evaluated: pm == PMSignificantDigits| yes Evaluation Count:2386 | yes Evaluation Count:1432993 |
| 2386-1432993 |
| 138 | for (uint i = digits.length(); i < precision; ++i) evaluated: i < precision| yes Evaluation Count:7938 | yes Evaluation Count:2386 |
| 2386-7938 |
| 139 | digits.append(zero); executed: digits.append(zero);Execution Count:7938 | 7938 |
| 140 | } executed: }Execution Count:2386 | 2386 |
| 141 | else { // pm == PMChopTrailingZeros | - |
| 142 | } executed: }Execution Count:1432993 | 1432993 |
| 143 | | - |
| 144 | if (always_show_decpt || decpt < digits.length()) evaluated: always_show_decpt| yes Evaluation Count:2388 | yes Evaluation Count:1434620 |
evaluated: decpt < digits.length()| yes Evaluation Count:51264 | yes Evaluation Count:1383356 |
| 2388-1434620 |
| 145 | digits.insert(decpt, decimal); executed: digits.insert(decpt, decimal);Execution Count:53652 | 53652 |
| 146 | | - |
| 147 | if (thousands_group) { evaluated: thousands_group| yes Evaluation Count:5756 | yes Evaluation Count:1431252 |
| 5756-1431252 |
| 148 | for (int i = decpt - 3; i > 0; i -= 3) evaluated: i > 0| yes Evaluation Count:2737 | yes Evaluation Count:5756 |
| 2737-5756 |
| 149 | digits.insert(i, group); executed: digits.insert(i, group);Execution Count:2737 | 2737 |
| 150 | } executed: }Execution Count:5756 | 5756 |
| 151 | | - |
| 152 | if (decpt == 0) evaluated: decpt == 0| yes Evaluation Count:47367 | yes Evaluation Count:1389641 |
| 47367-1389641 |
| 153 | digits.prepend(zero); executed: digits.prepend(zero);Execution Count:47367 | 47367 |
| 154 | | - |
| 155 | return digits; executed: return digits;Execution Count:1437008 | 1437008 |
| 156 | } | - |
| 157 | | - |
| 158 | QString &exponentForm(QChar zero, QChar decimal, QChar exponential, | - |
| 159 | QChar group, QChar plus, QChar minus, | - |
| 160 | QString &digits, int decpt, uint precision, | - |
| 161 | PrecisionMode pm, | - |
| 162 | bool always_show_decpt) | - |
| 163 | { | - |
| 164 | int exp = decpt - 1; executed (the execution status of this line is deduced): int exp = decpt - 1; | - |
| 165 | | - |
| 166 | if (pm == PMDecimalDigits) { evaluated: pm == PMDecimalDigits| yes Evaluation Count:11 | yes Evaluation Count:68259 |
| 11-68259 |
| 167 | for (uint i = digits.length(); i < precision + 1; ++i) evaluated: i < precision + 1| yes Evaluation Count:14 | yes Evaluation Count:11 |
| 11-14 |
| 168 | digits.append(zero); executed: digits.append(zero);Execution Count:14 | 14 |
| 169 | } executed: }Execution Count:11 | 11 |
| 170 | else if (pm == PMSignificantDigits) { evaluated: pm == PMSignificantDigits| yes Evaluation Count:2224 | yes Evaluation Count:66035 |
| 2224-66035 |
| 171 | for (uint i = digits.length(); i < precision; ++i) evaluated: i < precision| yes Evaluation Count:1920 | yes Evaluation Count:2224 |
| 1920-2224 |
| 172 | digits.append(zero); executed: digits.append(zero);Execution Count:1920 | 1920 |
| 173 | } executed: }Execution Count:2224 | 2224 |
| 174 | else { // pm == PMChopTrailingZeros | - |
| 175 | } executed: }Execution Count:66035 | 66035 |
| 176 | | - |
| 177 | if (always_show_decpt || digits.length() > 1) evaluated: always_show_decpt| yes Evaluation Count:2226 | yes Evaluation Count:66044 |
evaluated: digits.length() > 1| yes Evaluation Count:64723 | yes Evaluation Count:1321 |
| 1321-66044 |
| 178 | digits.insert(1, decimal); executed: digits.insert(1, decimal);Execution Count:66949 | 66949 |
| 179 | | - |
| 180 | digits.append(exponential); executed (the execution status of this line is deduced): digits.append(exponential); | - |
| 181 | digits.append(QLocalePrivate::longLongToString(zero, group, plus, minus, executed (the execution status of this line is deduced): digits.append(QLocalePrivate::longLongToString(zero, group, plus, minus, | - |
| 182 | exp, 2, 10, -1, QLocalePrivate::AlwaysShowSign)); executed (the execution status of this line is deduced): exp, 2, 10, -1, QLocalePrivate::AlwaysShowSign)); | - |
| 183 | | - |
| 184 | return digits; executed: return digits;Execution Count:68270 | 68270 |
| 185 | } | - |
| 186 | | - |
| 187 | // Removes thousand-group separators in "C" locale. | - |
| 188 | bool removeGroupSeparators(QLocalePrivate::CharBuff *num) | - |
| 189 | { | - |
| 190 | int group_cnt = 0; // counts number of group chars executed (the execution status of this line is deduced): int group_cnt = 0; | - |
| 191 | int decpt_idx = -1; executed (the execution status of this line is deduced): int decpt_idx = -1; | - |
| 192 | | - |
| 193 | char *data = num->data(); executed (the execution status of this line is deduced): char *data = num->data(); | - |
| 194 | int l = qstrlen(data); executed (the execution status of this line is deduced): int l = qstrlen(data); | - |
| 195 | | - |
| 196 | // Find the decimal point and check if there are any group chars | - |
| 197 | int i = 0; executed (the execution status of this line is deduced): int i = 0; | - |
| 198 | for (; i < l; ++i) { evaluated: i < l| yes Evaluation Count:34215 | yes Evaluation Count:13420 |
| 13420-34215 |
| 199 | char c = data[i]; executed (the execution status of this line is deduced): char c = data[i]; | - |
| 200 | | - |
| 201 | if (c == ',') { evaluated: c == ','| yes Evaluation Count:132 | yes Evaluation Count:34083 |
| 132-34083 |
| 202 | if (i == 0 || data[i - 1] < '0' || data[i - 1] > '9') evaluated: i == 0| yes Evaluation Count:7 | yes Evaluation Count:125 |
evaluated: data[i - 1] < '0'| yes Evaluation Count:1 | yes Evaluation Count:124 |
partially evaluated: data[i - 1] > '9'| no Evaluation Count:0 | yes Evaluation Count:124 |
| 0-125 |
| 203 | return false; executed: return false;Execution Count:8 | 8 |
| 204 | if (i == l - 1 || data[i + 1] < '0' || data[i + 1] > '9') evaluated: i == l - 1| yes Evaluation Count:10 | yes Evaluation Count:114 |
evaluated: data[i + 1] < '0'| yes Evaluation Count:5 | yes Evaluation Count:109 |
evaluated: data[i + 1] > '9'| yes Evaluation Count:1 | yes Evaluation Count:108 |
| 1-114 |
| 205 | return false; executed: return false;Execution Count:16 | 16 |
| 206 | ++group_cnt; executed (the execution status of this line is deduced): ++group_cnt; | - |
| 207 | } executed: }Execution Count:108 | 108 |
| 208 | else if (c == '.') { evaluated: c == '.'| yes Evaluation Count:822 | yes Evaluation Count:33261 |
| 822-33261 |
| 209 | // Fail if more than one decimal points | - |
| 210 | if (decpt_idx != -1) evaluated: decpt_idx != -1| yes Evaluation Count:1 | yes Evaluation Count:821 |
| 1-821 |
| 211 | return false; executed: return false;Execution Count:1 | 1 |
| 212 | decpt_idx = i; executed (the execution status of this line is deduced): decpt_idx = i; | - |
| 213 | } else if (c == 'e' || c == 'E') { executed: }Execution Count:821 evaluated: c == 'e'| yes Evaluation Count:33 | yes Evaluation Count:33228 |
partially evaluated: c == 'E'| no Evaluation Count:0 | yes Evaluation Count:33228 |
| 0-33228 |
| 214 | // an 'e' or 'E' - if we have not encountered a decimal | - |
| 215 | // point, this is where it "is". | - |
| 216 | if (decpt_idx == -1) evaluated: decpt_idx == -1| yes Evaluation Count:25 | yes Evaluation Count:8 |
| 8-25 |
| 217 | decpt_idx = i; executed: decpt_idx = i;Execution Count:25 | 25 |
| 218 | } executed: }Execution Count:33 | 33 |
| 219 | } | - |
| 220 | | - |
| 221 | // If no group chars, we're done | - |
| 222 | if (group_cnt == 0) evaluated: group_cnt == 0| yes Evaluation Count:13336 | yes Evaluation Count:84 |
| 84-13336 |
| 223 | return true; executed: return true;Execution Count:13336 | 13336 |
| 224 | | - |
| 225 | // No decimal point means that it "is" at the end of the string | - |
| 226 | if (decpt_idx == -1) evaluated: decpt_idx == -1| yes Evaluation Count:63 | yes Evaluation Count:21 |
| 21-63 |
| 227 | decpt_idx = l; executed: decpt_idx = l;Execution Count:63 | 63 |
| 228 | | - |
| 229 | i = 0; executed (the execution status of this line is deduced): i = 0; | - |
| 230 | while (i < l && group_cnt > 0) { partially evaluated: i < l| yes Evaluation Count:262 | no Evaluation Count:0 |
evaluated: group_cnt > 0| yes Evaluation Count:225 | yes Evaluation Count:37 |
| 0-262 |
| 231 | char c = data[i]; executed (the execution status of this line is deduced): char c = data[i]; | - |
| 232 | | - |
| 233 | if (c == ',') { evaluated: c == ','| yes Evaluation Count:67 | yes Evaluation Count:158 |
| 67-158 |
| 234 | // Don't allow group chars after the decimal point | - |
| 235 | if (i > decpt_idx) evaluated: i > decpt_idx| yes Evaluation Count:1 | yes Evaluation Count:66 |
| 1-66 |
| 236 | return false; executed: return false;Execution Count:1 | 1 |
| 237 | | - |
| 238 | // Check that it is placed correctly relative to the decpt | - |
| 239 | if ((decpt_idx - i) % 4 != 0) evaluated: (decpt_idx - i) % 4 != 0| yes Evaluation Count:13 | yes Evaluation Count:53 |
| 13-53 |
| 240 | return false; executed: return false;Execution Count:13 | 13 |
| 241 | | - |
| 242 | // Remove it | - |
| 243 | memmove(data + i, data + i + 1, l - i - 1); executed (the execution status of this line is deduced): memmove(data + i, data + i + 1, l - i - 1); | - |
| 244 | data[--l] = '\0'; executed (the execution status of this line is deduced): data[--l] = '\0'; | - |
| 245 | | - |
| 246 | --group_cnt; executed (the execution status of this line is deduced): --group_cnt; | - |
| 247 | --decpt_idx; executed (the execution status of this line is deduced): --decpt_idx; | - |
| 248 | } else { executed: }Execution Count:53 | 53 |
| 249 | // Check that we are not missing a separator | - |
| 250 | if (i < decpt_idx evaluated: i < decpt_idx| yes Evaluation Count:156 | yes Evaluation Count:2 |
| 2-156 |
| 251 | && (decpt_idx - i) % 4 == 0 evaluated: (decpt_idx - i) % 4 == 0| yes Evaluation Count:38 | yes Evaluation Count:118 |
| 38-118 |
| 252 | && !(i == 0 && (c == '-' || c == '+'))) // check for negative or positive sign at start of string evaluated: i == 0| yes Evaluation Count:37 | yes Evaluation Count:1 |
evaluated: c == '-'| yes Evaluation Count:1 | yes Evaluation Count:36 |
evaluated: c == '+'| yes Evaluation Count:4 | yes Evaluation Count:32 |
| 1-37 |
| 253 | return false; executed: return false;Execution Count:33 | 33 |
| 254 | ++i; executed (the execution status of this line is deduced): ++i; | - |
| 255 | } executed: }Execution Count:125 | 125 |
| 256 | } | - |
| 257 | | - |
| 258 | return true; executed: return true;Execution Count:37 | 37 |
| 259 | } | - |
| 260 | | - |
| 261 | /*- | - |
| 262 | * Copyright (c) 1992, 1993 | - |
| 263 | * The Regents of the University of California. All rights reserved. | - |
| 264 | * | - |
| 265 | * Redistribution and use in source and binary forms, with or without | - |
| 266 | * modification, are permitted provided that the following conditions | - |
| 267 | * are met: | - |
| 268 | * 1. Redistributions of source code must retain the above copyright | - |
| 269 | * notice, this list of conditions and the following disclaimer. | - |
| 270 | * 2. Redistributions in binary form must reproduce the above copyright | - |
| 271 | * notice, this list of conditions and the following disclaimer in the | - |
| 272 | * documentation and/or other materials provided with the distribution. | - |
| 273 | * 3. All advertising materials mentioning features or use of this software | - |
| 274 | * must display the following acknowledgment: | - |
| 275 | * This product includes software developed by the University of | - |
| 276 | * California, Berkeley and its contributors. | - |
| 277 | * 4. Neither the name of the University nor the names of its contributors | - |
| 278 | * may be used to endorse or promote products derived from this software | - |
| 279 | * without specific prior written permission. | - |
| 280 | * | - |
| 281 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | - |
| 282 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | - |
| 283 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | - |
| 284 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | - |
| 285 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | - |
| 286 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | - |
| 287 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | - |
| 288 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | - |
| 289 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | - |
| 290 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | - |
| 291 | * SUCH DAMAGE. | - |
| 292 | */ | - |
| 293 | | - |
| 294 | // static char sccsid[] = "@(#)strtouq.c 8.1 (Berkeley) 6/4/93"; | - |
| 295 | // "$FreeBSD: src/lib/libc/stdlib/strtoull.c,v 1.5.2.1 2001/03/02 09:45:20 obrien Exp $"; | - |
| 296 | | - |
| 297 | /* | - |
| 298 | * Convert a string to an unsigned long long integer. | - |
| 299 | * | - |
| 300 | * Ignores `locale' stuff. Assumes that the upper and lower case | - |
| 301 | * alphabets and digits are each contiguous. | - |
| 302 | */ | - |
| 303 | qulonglong qstrtoull(const char *nptr, const char **endptr, register int base, bool *ok) | - |
| 304 | { | - |
| 305 | register const char *s = nptr; executed (the execution status of this line is deduced): register const char *s = nptr; | - |
| 306 | register qulonglong acc; executed (the execution status of this line is deduced): register qulonglong acc; | - |
| 307 | register unsigned char c; executed (the execution status of this line is deduced): register unsigned char c; | - |
| 308 | register qulonglong qbase, cutoff; executed (the execution status of this line is deduced): register qulonglong qbase, cutoff; | - |
| 309 | register int any, cutlim; executed (the execution status of this line is deduced): register int any, cutlim; | - |
| 310 | | - |
| 311 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:51373 | no Evaluation Count:0 |
| 0-51373 |
| 312 | *ok = true; executed: *ok = true;Execution Count:51362 | 51362 |
| 313 | | - |
| 314 | /* | - |
| 315 | * See strtoq for comments as to the logic used. | - |
| 316 | */ | - |
| 317 | s = nptr; executed (the execution status of this line is deduced): s = nptr; | - |
| 318 | do { | - |
| 319 | c = *s++; executed (the execution status of this line is deduced): c = *s++; | - |
| 320 | } while (isspace(c)); executed: }Execution Count:51383 partially evaluated: isspace(c)| no Evaluation Count:0 | yes Evaluation Count:51347 |
| 0-51383 |
| 321 | if (c == '-') { evaluated: c == '-'| yes Evaluation Count:25 | yes Evaluation Count:51311 |
| 25-51311 |
| 322 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:25 | no Evaluation Count:0 |
| 0-25 |
| 323 | *ok = false; executed: *ok = false;Execution Count:25 | 25 |
| 324 | if (endptr != 0) partially evaluated: endptr != 0| yes Evaluation Count:25 | no Evaluation Count:0 |
| 0-25 |
| 325 | *endptr = s - 1; executed: *endptr = s - 1;Execution Count:25 | 25 |
| 326 | return 0; executed: return 0;Execution Count:25 | 25 |
| 327 | } else { | - |
| 328 | if (c == '+') partially evaluated: c == '+'| no Evaluation Count:0 | yes Evaluation Count:51310 |
| 0-51310 |
| 329 | c = *s++; never executed: c = *s++; | 0 |
| 330 | } executed: }Execution Count:51307 | 51307 |
| 331 | if ((base == 0 || base == 16) && evaluated: base == 0| yes Evaluation Count:22459 | yes Evaluation Count:28847 |
evaluated: base == 16| yes Evaluation Count:13393 | yes Evaluation Count:15454 |
| 13393-28847 |
| 332 | c == '0' && (*s == 'x' || *s == 'X')) { evaluated: c == '0'| yes Evaluation Count:2423 | yes Evaluation Count:33429 |
evaluated: *s == 'x'| yes Evaluation Count:20 | yes Evaluation Count:2403 |
partially evaluated: *s == 'X'| no Evaluation Count:0 | yes Evaluation Count:2403 |
| 0-33429 |
| 333 | c = s[1]; executed (the execution status of this line is deduced): c = s[1]; | - |
| 334 | s += 2; executed (the execution status of this line is deduced): s += 2; | - |
| 335 | base = 16; executed (the execution status of this line is deduced): base = 16; | - |
| 336 | } executed: }Execution Count:20 | 20 |
| 337 | if (base == 0) evaluated: base == 0| yes Evaluation Count:22459 | yes Evaluation Count:28855 |
| 22459-28855 |
| 338 | base = c == '0' ? 8 : 10; executed: base = c == '0' ? 8 : 10;Execution Count:22476 evaluated: c == '0'| yes Evaluation Count:2270 | yes Evaluation Count:20202 |
| 2270-22476 |
| 339 | qbase = unsigned(base); executed (the execution status of this line is deduced): qbase = unsigned(base); | - |
| 340 | cutoff = qulonglong(ULLONG_MAX) / qbase; executed (the execution status of this line is deduced): cutoff = qulonglong((9223372036854775807LL * 2ULL + 1)) / qbase; | - |
| 341 | cutlim = qulonglong(ULLONG_MAX) % qbase; executed (the execution status of this line is deduced): cutlim = qulonglong((9223372036854775807LL * 2ULL + 1)) % qbase; | - |
| 342 | for (acc = 0, any = 0;; c = *s++) { executed (the execution status of this line is deduced): for (acc = 0, any = 0;; c = *s++) { | - |
| 343 | if (!isascii(c)) partially evaluated: !isascii(c)| no Evaluation Count:0 | yes Evaluation Count:115485 |
| 0-115485 |
| 344 | break; | 0 |
| 345 | if (isdigit(c)) evaluated: isdigit(c)| yes Evaluation Count:50494 | yes Evaluation Count:64989 |
| 50494-64989 |
| 346 | c -= '0'; executed: c -= '0';Execution Count:50494 | 50494 |
| 347 | else if (isalpha(c)) evaluated: isalpha(c)| yes Evaluation Count:29006 | yes Evaluation Count:35994 |
| 29006-35994 |
| 348 | c -= isupper(c) ? 'A' - 10 : 'a' - 10; executed: c -= isupper(c) ? 'A' - 10 : 'a' - 10;Execution Count:29006 evaluated: isupper(c)| yes Evaluation Count:267 | yes Evaluation Count:28723 |
| 267-29006 |
| 349 | else | - |
| 350 | break; executed: break;Execution Count:35994 | 35994 |
| 351 | if (c >= base) evaluated: c >= base| yes Evaluation Count:15411 | yes Evaluation Count:64075 |
| 15411-64075 |
| 352 | break; executed: break;Execution Count:15418 | 15418 |
| 353 | if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) partially evaluated: any < 0| no Evaluation Count:0 | yes Evaluation Count:64075 |
partially evaluated: acc > cutoff| no Evaluation Count:0 | yes Evaluation Count:64075 |
evaluated: acc == cutoff| yes Evaluation Count:8 | yes Evaluation Count:64067 |
evaluated: c > cutlim| yes Evaluation Count:3 | yes Evaluation Count:5 |
| 0-64075 |
| 354 | any = -1; executed: any = -1;Execution Count:3 | 3 |
| 355 | else { | - |
| 356 | any = 1; executed (the execution status of this line is deduced): any = 1; | - |
| 357 | acc *= qbase; executed (the execution status of this line is deduced): acc *= qbase; | - |
| 358 | acc += c; executed (the execution status of this line is deduced): acc += c; | - |
| 359 | } executed: }Execution Count:64073 | 64073 |
| 360 | } | - |
| 361 | if (any == 0) { evaluated: any == 0| yes Evaluation Count:16286 | yes Evaluation Count:35115 |
| 16286-35115 |
| 362 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:16285 | no Evaluation Count:0 |
| 0-16285 |
| 363 | *ok = false; executed: *ok = false;Execution Count:16292 | 16292 |
| 364 | } else if (any < 0) { executed: }Execution Count:16300 evaluated: any < 0| yes Evaluation Count:3 | yes Evaluation Count:35112 |
| 3-35112 |
| 365 | acc = ULLONG_MAX; executed (the execution status of this line is deduced): acc = (9223372036854775807LL * 2ULL + 1); | - |
| 366 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:3 | no Evaluation Count:0 |
| 0-3 |
| 367 | *ok = false; executed: *ok = false;Execution Count:3 | 3 |
| 368 | } executed: }Execution Count:3 | 3 |
| 369 | if (endptr != 0) partially evaluated: endptr != 0| yes Evaluation Count:51394 | no Evaluation Count:0 |
| 0-51394 |
| 370 | *endptr = (any ? s - 1 : nptr); executed: *endptr = (any ? s - 1 : nptr);Execution Count:51348 evaluated: any| yes Evaluation Count:35115 | yes Evaluation Count:16250 |
| 16250-51348 |
| 371 | return acc; executed: return acc;Execution Count:51401 | 51401 |
| 372 | } | - |
| 373 | | - |
| 374 | | - |
| 375 | // "$FreeBSD: src/lib/libc/stdlib/strtoll.c,v 1.5.2.1 2001/03/02 09:45:20 obrien Exp $"; | - |
| 376 | | - |
| 377 | | - |
| 378 | /* | - |
| 379 | * Convert a string to a long long integer. | - |
| 380 | * | - |
| 381 | * Ignores `locale' stuff. Assumes that the upper and lower case | - |
| 382 | * alphabets and digits are each contiguous. | - |
| 383 | */ | - |
| 384 | qlonglong qstrtoll(const char *nptr, const char **endptr, register int base, bool *ok) | - |
| 385 | { | - |
| 386 | register const char *s; executed (the execution status of this line is deduced): register const char *s; | - |
| 387 | register qulonglong acc; executed (the execution status of this line is deduced): register qulonglong acc; | - |
| 388 | register unsigned char c; executed (the execution status of this line is deduced): register unsigned char c; | - |
| 389 | register qulonglong qbase, cutoff; executed (the execution status of this line is deduced): register qulonglong qbase, cutoff; | - |
| 390 | register int neg, any, cutlim; executed (the execution status of this line is deduced): register int neg, any, cutlim; | - |
| 391 | | - |
| 392 | /* | - |
| 393 | * Skip white space and pick up leading +/- sign if any. | - |
| 394 | * If base is 0, allow 0x for hex and 0 for octal, else | - |
| 395 | * assume decimal; if base is already 16, allow 0x. | - |
| 396 | */ | - |
| 397 | s = nptr; executed (the execution status of this line is deduced): s = nptr; | - |
| 398 | do { | - |
| 399 | c = *s++; executed (the execution status of this line is deduced): c = *s++; | - |
| 400 | } while (isspace(c)); executed: }Execution Count:254823 partially evaluated: isspace(c)| no Evaluation Count:0 | yes Evaluation Count:254823 |
| 0-254823 |
| 401 | if (c == '-') { evaluated: c == '-'| yes Evaluation Count:238 | yes Evaluation Count:254585 |
| 238-254585 |
| 402 | neg = 1; executed (the execution status of this line is deduced): neg = 1; | - |
| 403 | c = *s++; executed (the execution status of this line is deduced): c = *s++; | - |
| 404 | } else { executed: }Execution Count:238 | 238 |
| 405 | neg = 0; executed (the execution status of this line is deduced): neg = 0; | - |
| 406 | if (c == '+') evaluated: c == '+'| yes Evaluation Count:10 | yes Evaluation Count:254575 |
| 10-254575 |
| 407 | c = *s++; executed: c = *s++;Execution Count:10 | 10 |
| 408 | } executed: }Execution Count:254585 | 254585 |
| 409 | if ((base == 0 || base == 16) && evaluated: base == 0| yes Evaluation Count:53 | yes Evaluation Count:254770 |
evaluated: base == 16| yes Evaluation Count:176337 | yes Evaluation Count:78434 |
| 53-254770 |
| 410 | c == '0' && (*s == 'x' || *s == 'X')) { evaluated: c == '0'| yes Evaluation Count:49079 | yes Evaluation Count:127311 |
evaluated: *s == 'x'| yes Evaluation Count:41 | yes Evaluation Count:49038 |
partially evaluated: *s == 'X'| no Evaluation Count:0 | yes Evaluation Count:49038 |
| 0-127311 |
| 411 | c = s[1]; executed (the execution status of this line is deduced): c = s[1]; | - |
| 412 | s += 2; executed (the execution status of this line is deduced): s += 2; | - |
| 413 | base = 16; executed (the execution status of this line is deduced): base = 16; | - |
| 414 | } executed: }Execution Count:41 | 41 |
| 415 | if (base == 0) evaluated: base == 0| yes Evaluation Count:34 | yes Evaluation Count:254789 |
| 34-254789 |
| 416 | base = c == '0' ? 8 : 10; executed: base = c == '0' ? 8 : 10;Execution Count:34 evaluated: c == '0'| yes Evaluation Count:19 | yes Evaluation Count:15 |
| 15-34 |
| 417 | | - |
| 418 | /* | - |
| 419 | * Compute the cutoff value between legal numbers and illegal | - |
| 420 | * numbers. That is the largest legal value, divided by the | - |
| 421 | * base. An input number that is greater than this value, if | - |
| 422 | * followed by a legal input character, is too big. One that | - |
| 423 | * is equal to this value may be valid or not; the limit | - |
| 424 | * between valid and invalid numbers is then based on the last | - |
| 425 | * digit. For instance, if the range for quads is | - |
| 426 | * [-9223372036854775808..9223372036854775807] and the input base | - |
| 427 | * is 10, cutoff will be set to 922337203685477580 and cutlim to | - |
| 428 | * either 7 (neg==0) or 8 (neg==1), meaning that if we have | - |
| 429 | * accumulated a value > 922337203685477580, or equal but the | - |
| 430 | * next digit is > 7 (or 8), the number is too big, and we will | - |
| 431 | * return a range error. | - |
| 432 | * | - |
| 433 | * Set any if any `digits' consumed; make it negative to indicate | - |
| 434 | * overflow. | - |
| 435 | */ | - |
| 436 | qbase = unsigned(base); executed (the execution status of this line is deduced): qbase = unsigned(base); | - |
| 437 | cutoff = neg ? qulonglong(0-(LLONG_MIN + LLONG_MAX)) + LLONG_MAX : LLONG_MAX; evaluated: neg| yes Evaluation Count:238 | yes Evaluation Count:254585 |
| 238-254585 |
| 438 | cutlim = cutoff % qbase; executed (the execution status of this line is deduced): cutlim = cutoff % qbase; | - |
| 439 | cutoff /= qbase; executed (the execution status of this line is deduced): cutoff /= qbase; | - |
| 440 | for (acc = 0, any = 0;; c = *s++) { executed (the execution status of this line is deduced): for (acc = 0, any = 0;; c = *s++) { | - |
| 441 | if (!isascii(c)) partially evaluated: !isascii(c)| no Evaluation Count:0 | yes Evaluation Count:1163443 |
| 0-1163443 |
| 442 | break; | 0 |
| 443 | if (isdigit(c)) evaluated: isdigit(c)| yes Evaluation Count:629352 | yes Evaluation Count:534092 |
| 534092-629352 |
| 444 | c -= '0'; executed: c -= '0';Execution Count:629352 | 629352 |
| 445 | else if (isalpha(c)) evaluated: isalpha(c)| yes Evaluation Count:279433 | yes Evaluation Count:254657 |
| 254657-279433 |
| 446 | c -= isupper(c) ? 'A' - 10 : 'a' - 10; executed: c -= isupper(c) ? 'A' - 10 : 'a' - 10;Execution Count:279433 evaluated: isupper(c)| yes Evaluation Count:177974 | yes Evaluation Count:101459 |
| 101459-279433 |
| 447 | else | - |
| 448 | break; executed: break;Execution Count:254657 | 254657 |
| 449 | if (c >= base) evaluated: c >= base| yes Evaluation Count:164 | yes Evaluation Count:908621 |
| 164-908621 |
| 450 | break; executed: break;Execution Count:164 | 164 |
| 451 | if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) partially evaluated: any < 0| no Evaluation Count:0 | yes Evaluation Count:908622 |
evaluated: acc > cutoff| yes Evaluation Count:1 | yes Evaluation Count:908620 |
evaluated: acc == cutoff| yes Evaluation Count:11 | yes Evaluation Count:908611 |
evaluated: c > cutlim| yes Evaluation Count:3 | yes Evaluation Count:8 |
| 0-908622 |
| 452 | any = -1; executed: any = -1;Execution Count:4 | 4 |
| 453 | else { | - |
| 454 | any = 1; executed (the execution status of this line is deduced): any = 1; | - |
| 455 | acc *= qbase; executed (the execution status of this line is deduced): acc *= qbase; | - |
| 456 | acc += c; executed (the execution status of this line is deduced): acc += c; | - |
| 457 | } executed: }Execution Count:908619 | 908619 |
| 458 | } | - |
| 459 | if (any < 0) { evaluated: any < 0| yes Evaluation Count:4 | yes Evaluation Count:254817 |
| 4-254817 |
| 460 | acc = neg ? LLONG_MIN : LLONG_MAX; evaluated: neg| yes Evaluation Count:2 | yes Evaluation Count:2 |
| 2 |
| 461 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:4 | no Evaluation Count:0 |
| 0-4 |
| 462 | *ok = false; executed: *ok = false;Execution Count:4 | 4 |
| 463 | } else if (neg) { executed: }Execution Count:4 evaluated: neg| yes Evaluation Count:236 | yes Evaluation Count:254581 |
| 4-254581 |
| 464 | acc = (~acc) + 1; executed (the execution status of this line is deduced): acc = (~acc) + 1; | - |
| 465 | } executed: }Execution Count:236 | 236 |
| 466 | if (endptr != 0) partially evaluated: endptr != 0| yes Evaluation Count:254821 | no Evaluation Count:0 |
| 0-254821 |
| 467 | *endptr = (any >= 0 ? s - 1 : nptr); executed: *endptr = (any >= 0 ? s - 1 : nptr);Execution Count:254821 evaluated: any >= 0| yes Evaluation Count:254817 | yes Evaluation Count:4 |
| 4-254821 |
| 468 | | - |
| 469 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:254822 | no Evaluation Count:0 |
| 0-254822 |
| 470 | *ok = any > 0; executed: *ok = any > 0;Execution Count:254821 | 254821 |
| 471 | | - |
| 472 | return acc; executed: return acc;Execution Count:254821 | 254821 |
| 473 | } | - |
| 474 | | - |
| 475 | #ifndef QT_QLOCALE_USES_FCVT | - |
| 476 | | - |
| 477 | /* From: NetBSD: strtod.c,v 1.26 1998/02/03 18:44:21 perry Exp */ | - |
| 478 | /* $FreeBSD: src/lib/libc/stdlib/netbsd_strtod.c,v 1.2.2.2 2001/03/02 17:14:15 tegge Exp $ */ | - |
| 479 | | - |
| 480 | /* Please send bug reports to | - |
| 481 | David M. Gay | - |
| 482 | AT&T Bell Laboratories, Room 2C-463 | - |
| 483 | 600 Mountain Avenue | - |
| 484 | Murray Hill, NJ 07974-2070 | - |
| 485 | U.S.A. | - |
| 486 | dmg@research.att.com or research!dmg | - |
| 487 | */ | - |
| 488 | | - |
| 489 | /* strtod for IEEE-, VAX-, and IBM-arithmetic machines. | - |
| 490 | * | - |
| 491 | * This strtod returns a nearest machine number to the input decimal | - |
| 492 | * string (or sets errno to ERANGE). With IEEE arithmetic, ties are | - |
| 493 | * broken by the IEEE round-even rule. Otherwise ties are broken by | - |
| 494 | * biased rounding (add half and chop). | - |
| 495 | * | - |
| 496 | * Inspired loosely by William D. Clinger's paper "How to Read Floating | - |
| 497 | * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. | - |
| 498 | * | - |
| 499 | * Modifications: | - |
| 500 | * | - |
| 501 | * 1. We only require IEEE, IBM, or VAX double-precision | - |
| 502 | * arithmetic (not IEEE double-extended). | - |
| 503 | * 2. We get by with floating-point arithmetic in a case that | - |
| 504 | * Clinger missed -- when we're computing d * 10^n | - |
| 505 | * for a small integer d and the integer n is not too | - |
| 506 | * much larger than 22 (the maximum integer k for which | - |
| 507 | * we can represent 10^k exactly), we may be able to | - |
| 508 | * compute (d*10^k) * 10^(e-k) with just one roundoff. | - |
| 509 | * 3. Rather than a bit-at-a-time adjustment of the binary | - |
| 510 | * result in the hard case, we use floating-point | - |
| 511 | * arithmetic to determine the adjustment to within | - |
| 512 | * one bit; only in really hard cases do we need to | - |
| 513 | * compute a second residual. | - |
| 514 | * 4. Because of 3., we don't need a large table of powers of 10 | - |
| 515 | * for ten-to-e (just some small tables, e.g. of 10^k | - |
| 516 | * for 0 <= k <= 22). | - |
| 517 | */ | - |
| 518 | | - |
| 519 | /* | - |
| 520 | * #define IEEE_LITTLE_ENDIAN for IEEE-arithmetic machines where the least | - |
| 521 | * significant byte has the lowest address. | - |
| 522 | * #define IEEE_BIG_ENDIAN for IEEE-arithmetic machines where the most | - |
| 523 | * significant byte has the lowest address. | - |
| 524 | * #define Long int on machines with 32-bit ints and 64-bit longs. | - |
| 525 | * #define Sudden_Underflow for IEEE-format machines without gradual | - |
| 526 | * underflow (i.e., that flush to zero on underflow). | - |
| 527 | * #define IBM for IBM mainframe-style floating-point arithmetic. | - |
| 528 | * #define VAX for VAX-style floating-point arithmetic. | - |
| 529 | * #define Unsigned_Shifts if >> does treats its left operand as unsigned. | - |
| 530 | * #define No_leftright to omit left-right logic in fast floating-point | - |
| 531 | * computation of dtoa. | - |
| 532 | * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3. | - |
| 533 | * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines | - |
| 534 | * that use extended-precision instructions to compute rounded | - |
| 535 | * products and quotients) with IBM. | - |
| 536 | * #define ROUND_BIASED for IEEE-format with biased rounding. | - |
| 537 | * #define Inaccurate_Divide for IEEE-format with correctly rounded | - |
| 538 | * products but inaccurate quotients, e.g., for Intel i860. | - |
| 539 | * #define Just_16 to store 16 bits per 32-bit Long when doing high-precision | - |
| 540 | * integer arithmetic. Whether this speeds things up or slows things | - |
| 541 | * down depends on the machine and the number being converted. | - |
| 542 | * #define KR_headers for old-style C function headers. | - |
| 543 | * #define Bad_float_h if your system lacks a float.h or if it does not | - |
| 544 | * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, | - |
| 545 | * FLT_RADIX, FLT_ROUNDS, and DBL_MAX. | - |
| 546 | * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n) | - |
| 547 | * if memory is available and otherwise does something you deem | - |
| 548 | * appropriate. If MALLOC is undefined, malloc will be invoked | - |
| 549 | * directly -- and assumed always to succeed. | - |
| 550 | */ | - |
| 551 | | - |
| 552 | #if defined(LIBC_SCCS) && !defined(lint) | - |
| 553 | __RCSID("$NetBSD: strtod.c,v 1.26 1998/02/03 18:44:21 perry Exp $"); | - |
| 554 | #endif /* LIBC_SCCS and not lint */ | - |
| 555 | | - |
| 556 | /* | - |
| 557 | #if defined(__m68k__) || defined(__sparc__) || defined(__i386__) || \ | - |
| 558 | defined(__mips__) || defined(__ns32k__) || defined(__alpha__) || \ | - |
| 559 | defined(__powerpc__) || defined(Q_OS_WIN) || defined(Q_OS_DARWIN) || defined(Q_OS_MAC) || \ | - |
| 560 | defined(mips) || defined(Q_OS_AIX) || defined(Q_OS_SOLARIS) | - |
| 561 | # define IEEE_BIG_OR_LITTLE_ENDIAN 1 | - |
| 562 | #endif | - |
| 563 | */ | - |
| 564 | | - |
| 565 | // *All* of our architectures have IEEE arithmetic, don't they? | - |
| 566 | #define IEEE_BIG_OR_LITTLE_ENDIAN 1 | - |
| 567 | | - |
| 568 | #ifdef __arm32__ | - |
| 569 | /* | - |
| 570 | * Although the CPU is little endian the FP has different | - |
| 571 | * byte and word endianness. The byte order is still little endian | - |
| 572 | * but the word order is big endian. | - |
| 573 | */ | - |
| 574 | #define IEEE_BIG_OR_LITTLE_ENDIAN | - |
| 575 | #endif | - |
| 576 | | - |
| 577 | #ifdef vax | - |
| 578 | #define VAX | - |
| 579 | #endif | - |
| 580 | | - |
| 581 | #define Long qint32 | - |
| 582 | #define ULong quint32 | - |
| 583 | | - |
| 584 | #define MALLOC malloc | - |
| 585 | | - |
| 586 | #ifdef BSD_QDTOA_DEBUG | - |
| 587 | QT_BEGIN_INCLUDE_NAMESPACE | - |
| 588 | #include <stdio.h> | - |
| 589 | QT_END_INCLUDE_NAMESPACE | - |
| 590 | | - |
| 591 | #define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);} | - |
| 592 | #endif | - |
| 593 | | - |
| 594 | #ifdef Unsigned_Shifts | - |
| 595 | #define Sign_Extend(a,b) if (b < 0) a |= 0xffff0000; | - |
| 596 | #else | - |
| 597 | #define Sign_Extend(a,b) /*no-op*/ | - |
| 598 | #endif | - |
| 599 | | - |
| 600 | #if (defined(IEEE_BIG_OR_LITTLE_ENDIAN) + defined(VAX) + defined(IBM)) != 1 | - |
| 601 | #error Exactly one of IEEE_BIG_OR_LITTLE_ENDIAN, VAX, or IBM should be defined. | - |
| 602 | #endif | - |
| 603 | | - |
| 604 | static inline ULong getWord0(const NEEDS_VOLATILE double x) | - |
| 605 | { | - |
| 606 | const NEEDS_VOLATILE uchar *ptr = reinterpret_cast<const NEEDS_VOLATILE uchar *>(&x); executed (the execution status of this line is deduced): const volatile uchar *ptr = reinterpret_cast<const volatile uchar *>(&x); | - |
| 607 | if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { partially evaluated: QSysInfo::ByteOrder == QSysInfo::BigEndian| no Evaluation Count:0 | yes Evaluation Count:13725407 |
| 0-13725407 |
| 608 | return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3]; never executed: return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3]; | 0 |
| 609 | } else { | - |
| 610 | return (ptr[7]<<24) + (ptr[6]<<16) + (ptr[5]<<8) + ptr[4]; executed: return (ptr[7]<<24) + (ptr[6]<<16) + (ptr[5]<<8) + ptr[4];Execution Count:13725407 | 13725407 |
| 611 | } | - |
| 612 | } | - |
| 613 | | - |
| 614 | static inline void setWord0(NEEDS_VOLATILE double *x, ULong l) | - |
| 615 | { | - |
| 616 | NEEDS_VOLATILE uchar *ptr = reinterpret_cast<NEEDS_VOLATILE uchar *>(x); executed (the execution status of this line is deduced): volatile uchar *ptr = reinterpret_cast<volatile uchar *>(x); | - |
| 617 | if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { partially evaluated: QSysInfo::ByteOrder == QSysInfo::BigEndian| no Evaluation Count:0 | yes Evaluation Count:6325072 |
| 0-6325072 |
| 618 | ptr[0] = uchar(l>>24); never executed (the execution status of this line is deduced): ptr[0] = uchar(l>>24); | - |
| 619 | ptr[1] = uchar(l>>16); never executed (the execution status of this line is deduced): ptr[1] = uchar(l>>16); | - |
| 620 | ptr[2] = uchar(l>>8); never executed (the execution status of this line is deduced): ptr[2] = uchar(l>>8); | - |
| 621 | ptr[3] = uchar(l); never executed (the execution status of this line is deduced): ptr[3] = uchar(l); | - |
| 622 | } else { | 0 |
| 623 | ptr[7] = uchar(l>>24); executed (the execution status of this line is deduced): ptr[7] = uchar(l>>24); | - |
| 624 | ptr[6] = uchar(l>>16); executed (the execution status of this line is deduced): ptr[6] = uchar(l>>16); | - |
| 625 | ptr[5] = uchar(l>>8); executed (the execution status of this line is deduced): ptr[5] = uchar(l>>8); | - |
| 626 | ptr[4] = uchar(l); executed (the execution status of this line is deduced): ptr[4] = uchar(l); | - |
| 627 | } executed: }Execution Count:6325072 | 6325072 |
| 628 | } | - |
| 629 | | - |
| 630 | static inline ULong getWord1(const NEEDS_VOLATILE double x) | - |
| 631 | { | - |
| 632 | const NEEDS_VOLATILE uchar *ptr = reinterpret_cast<const NEEDS_VOLATILE uchar *>(&x); executed (the execution status of this line is deduced): const volatile uchar *ptr = reinterpret_cast<const volatile uchar *>(&x); | - |
| 633 | if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { partially evaluated: QSysInfo::ByteOrder == QSysInfo::BigEndian| no Evaluation Count:0 | yes Evaluation Count:1463306 |
| 0-1463306 |
| 634 | return (ptr[4]<<24) + (ptr[5]<<16) + (ptr[6]<<8) + ptr[7]; never executed: return (ptr[4]<<24) + (ptr[5]<<16) + (ptr[6]<<8) + ptr[7]; | 0 |
| 635 | } else { | - |
| 636 | return (ptr[3]<<24) + (ptr[2]<<16) + (ptr[1]<<8) + ptr[0]; executed: return (ptr[3]<<24) + (ptr[2]<<16) + (ptr[1]<<8) + ptr[0];Execution Count:1463306 | 1463306 |
| 637 | } | - |
| 638 | } | - |
| 639 | static inline void setWord1(NEEDS_VOLATILE double *x, ULong l) | - |
| 640 | { | - |
| 641 | NEEDS_VOLATILE uchar *ptr = reinterpret_cast<uchar NEEDS_VOLATILE *>(x); executed (the execution status of this line is deduced): volatile uchar *ptr = reinterpret_cast<uchar volatile *>(x); | - |
| 642 | if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { partially evaluated: QSysInfo::ByteOrder == QSysInfo::BigEndian| no Evaluation Count:0 | yes Evaluation Count:400 |
| 0-400 |
| 643 | ptr[4] = uchar(l>>24); never executed (the execution status of this line is deduced): ptr[4] = uchar(l>>24); | - |
| 644 | ptr[5] = uchar(l>>16); never executed (the execution status of this line is deduced): ptr[5] = uchar(l>>16); | - |
| 645 | ptr[6] = uchar(l>>8); never executed (the execution status of this line is deduced): ptr[6] = uchar(l>>8); | - |
| 646 | ptr[7] = uchar(l); never executed (the execution status of this line is deduced): ptr[7] = uchar(l); | - |
| 647 | } else { | 0 |
| 648 | ptr[3] = uchar(l>>24); executed (the execution status of this line is deduced): ptr[3] = uchar(l>>24); | - |
| 649 | ptr[2] = uchar(l>>16); executed (the execution status of this line is deduced): ptr[2] = uchar(l>>16); | - |
| 650 | ptr[1] = uchar(l>>8); executed (the execution status of this line is deduced): ptr[1] = uchar(l>>8); | - |
| 651 | ptr[0] = uchar(l); executed (the execution status of this line is deduced): ptr[0] = uchar(l); | - |
| 652 | } executed: }Execution Count:400 | 400 |
| 653 | } | - |
| 654 | | - |
| 655 | static inline void Storeinc(ULong *&a, const ULong &b, const ULong &c) | - |
| 656 | { | - |
| 657 | | - |
| 658 | *a = (ushort(b) << 16) | ushort(c); executed (the execution status of this line is deduced): *a = (ushort(b) << 16) | ushort(c); | - |
| 659 | ++a; executed (the execution status of this line is deduced): ++a; | - |
| 660 | } executed: }Execution Count:972173 | 972173 |
| 661 | | - |
| 662 | /* #define P DBL_MANT_DIG */ | - |
| 663 | /* Ten_pmax = floor(P*log(2)/log(5)) */ | - |
| 664 | /* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */ | - |
| 665 | /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ | - |
| 666 | /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */ | - |
| 667 | | - |
| 668 | #if defined(IEEE_BIG_OR_LITTLE_ENDIAN) | - |
| 669 | #define Exp_shift 20 | - |
| 670 | #define Exp_shift1 20 | - |
| 671 | #define Exp_msk1 0x100000 | - |
| 672 | #define Exp_msk11 0x100000 | - |
| 673 | #define Exp_mask 0x7ff00000 | - |
| 674 | #define P 53 | - |
| 675 | #define Bias 1023 | - |
| 676 | #define IEEE_Arith | - |
| 677 | #define Emin (-1022) | - |
| 678 | #define Exp_1 0x3ff00000 | - |
| 679 | #define Exp_11 0x3ff00000 | - |
| 680 | #define Ebits 11 | - |
| 681 | #define Frac_mask 0xfffff | - |
| 682 | #define Frac_mask1 0xfffff | - |
| 683 | #define Ten_pmax 22 | - |
| 684 | #define Bletch 0x10 | - |
| 685 | #define Bndry_mask 0xfffff | - |
| 686 | #define Bndry_mask1 0xfffff | - |
| 687 | #if defined(LSB) && defined(Q_OS_VXWORKS) | - |
| 688 | #undef LSB | - |
| 689 | #endif | - |
| 690 | #define LSB 1 | - |
| 691 | #define Sign_bit 0x80000000 | - |
| 692 | #define Log2P 1 | - |
| 693 | #define Tiny0 0 | - |
| 694 | #define Tiny1 1 | - |
| 695 | #define Quick_max 14 | - |
| 696 | #define Int_max 14 | - |
| 697 | #define Infinite(x) (getWord0(x) == 0x7ff00000) /* sufficient test for here */ | - |
| 698 | #else | - |
| 699 | #undef Sudden_Underflow | - |
| 700 | #define Sudden_Underflow | - |
| 701 | #ifdef IBM | - |
| 702 | #define Exp_shift 24 | - |
| 703 | #define Exp_shift1 24 | - |
| 704 | #define Exp_msk1 0x1000000 | - |
| 705 | #define Exp_msk11 0x1000000 | - |
| 706 | #define Exp_mask 0x7f000000 | - |
| 707 | #define P 14 | - |
| 708 | #define Bias 65 | - |
| 709 | #define Exp_1 0x41000000 | - |
| 710 | #define Exp_11 0x41000000 | - |
| 711 | #define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ | - |
| 712 | #define Frac_mask 0xffffff | - |
| 713 | #define Frac_mask1 0xffffff | - |
| 714 | #define Bletch 4 | - |
| 715 | #define Ten_pmax 22 | - |
| 716 | #define Bndry_mask 0xefffff | - |
| 717 | #define Bndry_mask1 0xffffff | - |
| 718 | #define LSB 1 | - |
| 719 | #define Sign_bit 0x80000000 | - |
| 720 | #define Log2P 4 | - |
| 721 | #define Tiny0 0x100000 | - |
| 722 | #define Tiny1 0 | - |
| 723 | #define Quick_max 14 | - |
| 724 | #define Int_max 15 | - |
| 725 | #else /* VAX */ | - |
| 726 | #define Exp_shift 23 | - |
| 727 | #define Exp_shift1 7 | - |
| 728 | #define Exp_msk1 0x80 | - |
| 729 | #define Exp_msk11 0x800000 | - |
| 730 | #define Exp_mask 0x7f80 | - |
| 731 | #define P 56 | - |
| 732 | #define Bias 129 | - |
| 733 | #define Exp_1 0x40800000 | - |
| 734 | #define Exp_11 0x4080 | - |
| 735 | #define Ebits 8 | - |
| 736 | #define Frac_mask 0x7fffff | - |
| 737 | #define Frac_mask1 0xffff007f | - |
| 738 | #define Ten_pmax 24 | - |
| 739 | #define Bletch 2 | - |
| 740 | #define Bndry_mask 0xffff007f | - |
| 741 | #define Bndry_mask1 0xffff007f | - |
| 742 | #define LSB 0x10000 | - |
| 743 | #define Sign_bit 0x8000 | - |
| 744 | #define Log2P 1 | - |
| 745 | #define Tiny0 0x80 | - |
| 746 | #define Tiny1 0 | - |
| 747 | #define Quick_max 15 | - |
| 748 | #define Int_max 15 | - |
| 749 | #endif | - |
| 750 | #endif | - |
| 751 | | - |
| 752 | #ifndef IEEE_Arith | - |
| 753 | #define ROUND_BIASED | - |
| 754 | #endif | - |
| 755 | | - |
| 756 | #ifdef RND_PRODQUOT | - |
| 757 | #define rounded_product(a,b) a = rnd_prod(a, b) | - |
| 758 | #define rounded_quotient(a,b) a = rnd_quot(a, b) | - |
| 759 | extern double rnd_prod(double, double), rnd_quot(double, double); | - |
| 760 | #else | - |
| 761 | #define rounded_product(a,b) a *= b | - |
| 762 | #define rounded_quotient(a,b) a /= b | - |
| 763 | #endif | - |
| 764 | | - |
| 765 | #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) | - |
| 766 | #define Big1 0xffffffff | - |
| 767 | | - |
| 768 | #ifndef Just_16 | - |
| 769 | /* When Pack_32 is not defined, we store 16 bits per 32-bit Long. | - |
| 770 | * This makes some inner loops simpler and sometimes saves work | - |
| 771 | * during multiplications, but it often seems to make things slightly | - |
| 772 | * slower. Hence the default is now to store 32 bits per Long. | - |
| 773 | */ | - |
| 774 | #ifndef Pack_32 | - |
| 775 | #define Pack_32 | - |
| 776 | #endif | - |
| 777 | #endif | - |
| 778 | | - |
| 779 | #define Kmax 15 | - |
| 780 | | - |
| 781 | struct | - |
| 782 | Bigint { | - |
| 783 | struct Bigint *next; | - |
| 784 | int k, maxwds, sign, wds; | - |
| 785 | ULong x[1]; | - |
| 786 | }; | - |
| 787 | | - |
| 788 | typedef struct Bigint Bigint; | - |
| 789 | | - |
| 790 | static Bigint *Balloc(int k) | - |
| 791 | { | - |
| 792 | int x; executed (the execution status of this line is deduced): int x; | - |
| 793 | Bigint *rv; executed (the execution status of this line is deduced): Bigint *rv; | - |
| 794 | | - |
| 795 | x = 1 << k; executed (the execution status of this line is deduced): x = 1 << k; | - |
| 796 | rv = static_cast<Bigint *>(MALLOC(sizeof(Bigint) + (x-1)*sizeof(Long))); executed (the execution status of this line is deduced): rv = static_cast<Bigint *>(malloc(sizeof(Bigint) + (x-1)*sizeof(qint32))); | - |
| 797 | Q_CHECK_PTR(rv); never executed: qBadAlloc(); executed: }Execution Count:1476124 partially evaluated: !(rv)| no Evaluation Count:0 | yes Evaluation Count:1476124 |
partially evaluated: 0| no Evaluation Count:0 | yes Evaluation Count:1476124 |
| 0-1476124 |
| 798 | rv->k = k; executed (the execution status of this line is deduced): rv->k = k; | - |
| 799 | rv->maxwds = x; executed (the execution status of this line is deduced): rv->maxwds = x; | - |
| 800 | rv->sign = rv->wds = 0; executed (the execution status of this line is deduced): rv->sign = rv->wds = 0; | - |
| 801 | return rv; executed: return rv;Execution Count:1476124 | 1476124 |
| 802 | } | - |
| 803 | | - |
| 804 | static void Bfree(Bigint *v) | - |
| 805 | { | - |
| 806 | free(v); executed (the execution status of this line is deduced): free(v); | - |
| 807 | } executed: }Execution Count:1476126 | 1476126 |
| 808 | | - |
| 809 | #define Bcopy(x,y) memcpy(reinterpret_cast<char *>(&x->sign), reinterpret_cast<char *>(&y->sign), \ | - |
| 810 | y->wds*sizeof(Long) + 2*sizeof(int)) | - |
| 811 | | - |
| 812 | /* multiply by m and add a */ | - |
| 813 | static Bigint *multadd(Bigint *b, int m, int a) | - |
| 814 | { | - |
| 815 | int i, wds; executed (the execution status of this line is deduced): int i, wds; | - |
| 816 | ULong *x, y; executed (the execution status of this line is deduced): quint32 *x, y; | - |
| 817 | #ifdef Pack_32 | - |
| 818 | ULong xi, z; executed (the execution status of this line is deduced): quint32 xi, z; | - |
| 819 | #endif | - |
| 820 | Bigint *b1; executed (the execution status of this line is deduced): Bigint *b1; | - |
| 821 | | - |
| 822 | wds = b->wds; executed (the execution status of this line is deduced): wds = b->wds; | - |
| 823 | x = b->x; executed (the execution status of this line is deduced): x = b->x; | - |
| 824 | i = 0; executed (the execution status of this line is deduced): i = 0; | - |
| 825 | do { | - |
| 826 | #ifdef Pack_32 | - |
| 827 | xi = *x; executed (the execution status of this line is deduced): xi = *x; | - |
| 828 | y = (xi & 0xffff) * m + a; executed (the execution status of this line is deduced): y = (xi & 0xffff) * m + a; | - |
| 829 | z = (xi >> 16) * m + (y >> 16); executed (the execution status of this line is deduced): z = (xi >> 16) * m + (y >> 16); | - |
| 830 | a = (z >> 16); executed (the execution status of this line is deduced): a = (z >> 16); | - |
| 831 | *x++ = (z << 16) + (y & 0xffff); executed (the execution status of this line is deduced): *x++ = (z << 16) + (y & 0xffff); | - |
| 832 | #else | - |
| 833 | y = *x * m + a; | - |
| 834 | a = (y >> 16); | - |
| 835 | *x++ = y & 0xffff; | - |
| 836 | #endif | - |
| 837 | } executed: }Execution Count:1276789 | 1276789 |
| 838 | while(++i < wds); evaluated: ++i < wds| yes Evaluation Count:1133800 | yes Evaluation Count:142989 |
| 142989-1133800 |
| 839 | if (a) { evaluated: a| yes Evaluation Count:2045 | yes Evaluation Count:140944 |
| 2045-140944 |
| 840 | if (wds >= b->maxwds) { partially evaluated: wds >= b->maxwds| no Evaluation Count:0 | yes Evaluation Count:2045 |
| 0-2045 |
| 841 | b1 = Balloc(b->k+1); never executed (the execution status of this line is deduced): b1 = Balloc(b->k+1); | - |
| 842 | Bcopy(b1, b); never executed (the execution status of this line is deduced): memcpy(reinterpret_cast<char *>(&b1->sign), reinterpret_cast<char *>(&b->sign), b->wds*sizeof(qint32) + 2*sizeof(int)); | - |
| 843 | Bfree(b); never executed (the execution status of this line is deduced): Bfree(b); | - |
| 844 | b = b1; never executed (the execution status of this line is deduced): b = b1; | - |
| 845 | } | 0 |
| 846 | b->x[wds++] = a; executed (the execution status of this line is deduced): b->x[wds++] = a; | - |
| 847 | b->wds = wds; executed (the execution status of this line is deduced): b->wds = wds; | - |
| 848 | } executed: }Execution Count:2045 | 2045 |
| 849 | return b; executed: return b;Execution Count:142989 | 142989 |
| 850 | } | - |
| 851 | | - |
| 852 | static Bigint *s2b(const char *s, int nd0, int nd, ULong y9) | - |
| 853 | { | - |
| 854 | Bigint *b; executed (the execution status of this line is deduced): Bigint *b; | - |
| 855 | int i, k; executed (the execution status of this line is deduced): int i, k; | - |
| 856 | Long x, y; executed (the execution status of this line is deduced): qint32 x, y; | - |
| 857 | | - |
| 858 | x = (nd + 8) / 9; executed (the execution status of this line is deduced): x = (nd + 8) / 9; | - |
| 859 | for(k = 0, y = 1; x > y; y <<= 1, k++) ; executed: ;Execution Count:517 evaluated: x > y| yes Evaluation Count:517 | yes Evaluation Count:161 |
| 161-517 |
| 860 | #ifdef Pack_32 | - |
| 861 | b = Balloc(k); executed (the execution status of this line is deduced): b = Balloc(k); | - |
| 862 | b->x[0] = y9; executed (the execution status of this line is deduced): b->x[0] = y9; | - |
| 863 | b->wds = 1; executed (the execution status of this line is deduced): b->wds = 1; | - |
| 864 | #else | - |
| 865 | b = Balloc(k+1); | - |
| 866 | b->x[0] = y9 & 0xffff; | - |
| 867 | b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; | - |
| 868 | #endif | - |
| 869 | | - |
| 870 | i = 9; executed (the execution status of this line is deduced): i = 9; | - |
| 871 | if (9 < nd0) { evaluated: 9 < nd0| yes Evaluation Count:129 | yes Evaluation Count:32 |
| 32-129 |
| 872 | s += 9; executed (the execution status of this line is deduced): s += 9; | - |
| 873 | do b = multadd(b, 10, *s++ - '0'); executed: b = multadd(b, 10, *s++ - '0');Execution Count:18442 | 18442 |
| 874 | while(++i < nd0); evaluated: ++i < nd0| yes Evaluation Count:18313 | yes Evaluation Count:129 |
| 129-18313 |
| 875 | s++; executed (the execution status of this line is deduced): s++; | - |
| 876 | } executed: }Execution Count:129 | 129 |
| 877 | else | - |
| 878 | s += 10; executed: s += 10;Execution Count:32 | 32 |
| 879 | for(; i < nd; i++) evaluated: i < nd| yes Evaluation Count:334 | yes Evaluation Count:161 |
| 161-334 |
| 880 | b = multadd(b, 10, *s++ - '0'); executed: b = multadd(b, 10, *s++ - '0');Execution Count:334 | 334 |
| 881 | return b; executed: return b;Execution Count:161 | 161 |
| 882 | } | - |
| 883 | | - |
| 884 | static int hi0bits(ULong x) | - |
| 885 | { | - |
| 886 | int k = 0; executed (the execution status of this line is deduced): int k = 0; | - |
| 887 | | - |
| 888 | if (!(x & 0xffff0000)) { evaluated: !(x & 0xffff0000)| yes Evaluation Count:486 | yes Evaluation Count:411 |
| 411-486 |
| 889 | k = 16; executed (the execution status of this line is deduced): k = 16; | - |
| 890 | x <<= 16; executed (the execution status of this line is deduced): x <<= 16; | - |
| 891 | } executed: }Execution Count:486 | 486 |
| 892 | if (!(x & 0xff000000)) { evaluated: !(x & 0xff000000)| yes Evaluation Count:395 | yes Evaluation Count:502 |
| 395-502 |
| 893 | k += 8; executed (the execution status of this line is deduced): k += 8; | - |
| 894 | x <<= 8; executed (the execution status of this line is deduced): x <<= 8; | - |
| 895 | } executed: }Execution Count:395 | 395 |
| 896 | if (!(x & 0xf0000000)) { evaluated: !(x & 0xf0000000)| yes Evaluation Count:419 | yes Evaluation Count:478 |
| 419-478 |
| 897 | k += 4; executed (the execution status of this line is deduced): k += 4; | - |
| 898 | x <<= 4; executed (the execution status of this line is deduced): x <<= 4; | - |
| 899 | } executed: }Execution Count:419 | 419 |
| 900 | if (!(x & 0xc0000000)) { evaluated: !(x & 0xc0000000)| yes Evaluation Count:527 | yes Evaluation Count:370 |
| 370-527 |
| 901 | k += 2; executed (the execution status of this line is deduced): k += 2; | - |
| 902 | x <<= 2; executed (the execution status of this line is deduced): x <<= 2; | - |
| 903 | } executed: }Execution Count:527 | 527 |
| 904 | if (!(x & 0x80000000)) { evaluated: !(x & 0x80000000)| yes Evaluation Count:619 | yes Evaluation Count:278 |
| 278-619 |
| 905 | k++; executed (the execution status of this line is deduced): k++; | - |
| 906 | if (!(x & 0x40000000)) partially evaluated: !(x & 0x40000000)| no Evaluation Count:0 | yes Evaluation Count:619 |
| 0-619 |
| 907 | return 32; never executed: return 32; | 0 |
| 908 | } executed: }Execution Count:619 | 619 |
| 909 | return k; executed: return k;Execution Count:897 | 897 |
| 910 | } | - |
| 911 | | - |
| 912 | static int lo0bits(ULong *y) | - |
| 913 | { | - |
| 914 | int k; executed (the execution status of this line is deduced): int k; | - |
| 915 | ULong x = *y; executed (the execution status of this line is deduced): quint32 x = *y; | - |
| 916 | | - |
| 917 | if (x & 7) { evaluated: x & 7| yes Evaluation Count:23206 | yes Evaluation Count:1440058 |
| 23206-1440058 |
| 918 | if (x & 1) evaluated: x & 1| yes Evaluation Count:10888 | yes Evaluation Count:12318 |
| 10888-12318 |
| 919 | return 0; executed: return 0;Execution Count:10888 | 10888 |
| 920 | if (x & 2) { evaluated: x & 2| yes Evaluation Count:6418 | yes Evaluation Count:5900 |
| 5900-6418 |
| 921 | *y = x >> 1; executed (the execution status of this line is deduced): *y = x >> 1; | - |
| 922 | return 1; executed: return 1;Execution Count:6418 | 6418 |
| 923 | } | - |
| 924 | *y = x >> 2; executed (the execution status of this line is deduced): *y = x >> 2; | - |
| 925 | return 2; executed: return 2;Execution Count:5900 | 5900 |
| 926 | } | - |
| 927 | k = 0; executed (the execution status of this line is deduced): k = 0; | - |
| 928 | if (!(x & 0xffff)) { evaluated: !(x & 0xffff)| yes Evaluation Count:717529 | yes Evaluation Count:722529 |
| 717529-722529 |
| 929 | k = 16; executed (the execution status of this line is deduced): k = 16; | - |
| 930 | x >>= 16; executed (the execution status of this line is deduced): x >>= 16; | - |
| 931 | } executed: }Execution Count:717529 | 717529 |
| 932 | if (!(x & 0xff)) { evaluated: !(x & 0xff)| yes Evaluation Count:743001 | yes Evaluation Count:697057 |
| 697057-743001 |
| 933 | k += 8; executed (the execution status of this line is deduced): k += 8; | - |
| 934 | x >>= 8; executed (the execution status of this line is deduced): x >>= 8; | - |
| 935 | } executed: }Execution Count:743001 | 743001 |
| 936 | if (!(x & 0xf)) { evaluated: !(x & 0xf)| yes Evaluation Count:874527 | yes Evaluation Count:565531 |
| 565531-874527 |
| 937 | k += 4; executed (the execution status of this line is deduced): k += 4; | - |
| 938 | x >>= 4; executed (the execution status of this line is deduced): x >>= 4; | - |
| 939 | } executed: }Execution Count:874527 | 874527 |
| 940 | if (!(x & 0x3)) { evaluated: !(x & 0x3)| yes Evaluation Count:677243 | yes Evaluation Count:762815 |
| 677243-762815 |
| 941 | k += 2; executed (the execution status of this line is deduced): k += 2; | - |
| 942 | x >>= 2; executed (the execution status of this line is deduced): x >>= 2; | - |
| 943 | } executed: }Execution Count:677243 | 677243 |
| 944 | if (!(x & 1)) { evaluated: !(x & 1)| yes Evaluation Count:675203 | yes Evaluation Count:764855 |
| 675203-764855 |
| 945 | k++; executed (the execution status of this line is deduced): k++; | - |
| 946 | x >>= 1; executed (the execution status of this line is deduced): x >>= 1; | - |
| 947 | if (!x & 1) partially evaluated: !x & 1| no Evaluation Count:0 | yes Evaluation Count:675203 |
| 0-675203 |
| 948 | return 32; never executed: return 32; | 0 |
| 949 | } executed: }Execution Count:675203 | 675203 |
| 950 | *y = x; executed (the execution status of this line is deduced): *y = x; | - |
| 951 | return k; executed: return k;Execution Count:1440058 | 1440058 |
| 952 | } | - |
| 953 | | - |
| 954 | static Bigint *i2b(int i) | - |
| 955 | { | - |
| 956 | Bigint *b; executed (the execution status of this line is deduced): Bigint *b; | - |
| 957 | | - |
| 958 | b = Balloc(1); executed (the execution status of this line is deduced): b = Balloc(1); | - |
| 959 | b->x[0] = i; executed (the execution status of this line is deduced): b->x[0] = i; | - |
| 960 | b->wds = 1; executed (the execution status of this line is deduced): b->wds = 1; | - |
| 961 | return b; executed: return b;Execution Count:2398 | 2398 |
| 962 | } | - |
| 963 | | - |
| 964 | static Bigint *mult(Bigint *a, Bigint *b) | - |
| 965 | { | - |
| 966 | Bigint *c; executed (the execution status of this line is deduced): Bigint *c; | - |
| 967 | int k, wa, wb, wc; executed (the execution status of this line is deduced): int k, wa, wb, wc; | - |
| 968 | ULong carry, y, z; executed (the execution status of this line is deduced): quint32 carry, y, z; | - |
| 969 | ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; executed (the execution status of this line is deduced): quint32 *x, *xa, *xae, *xb, *xbe, *xc, *xc0; | - |
| 970 | #ifdef Pack_32 | - |
| 971 | ULong z2; executed (the execution status of this line is deduced): quint32 z2; | - |
| 972 | #endif | - |
| 973 | | - |
| 974 | if (a->wds < b->wds) { evaluated: a->wds < b->wds| yes Evaluation Count:1570 | yes Evaluation Count:1451 |
| 1451-1570 |
| 975 | c = a; executed (the execution status of this line is deduced): c = a; | - |
| 976 | a = b; executed (the execution status of this line is deduced): a = b; | - |
| 977 | b = c; executed (the execution status of this line is deduced): b = c; | - |
| 978 | } executed: }Execution Count:1570 | 1570 |
| 979 | k = a->k; executed (the execution status of this line is deduced): k = a->k; | - |
| 980 | wa = a->wds; executed (the execution status of this line is deduced): wa = a->wds; | - |
| 981 | wb = b->wds; executed (the execution status of this line is deduced): wb = b->wds; | - |
| 982 | wc = wa + wb; executed (the execution status of this line is deduced): wc = wa + wb; | - |
| 983 | if (wc > a->maxwds) evaluated: wc > a->maxwds| yes Evaluation Count:1619 | yes Evaluation Count:1402 |
| 1402-1619 |
| 984 | k++; executed: k++;Execution Count:1619 | 1619 |
| 985 | c = Balloc(k); executed (the execution status of this line is deduced): c = Balloc(k); | - |
| 986 | for(x = c->x, xa = x + wc; x < xa; x++) evaluated: x < xa| yes Evaluation Count:17702 | yes Evaluation Count:3021 |
| 3021-17702 |
| 987 | *x = 0; executed: *x = 0;Execution Count:17702 | 17702 |
| 988 | xa = a->x; executed (the execution status of this line is deduced): xa = a->x; | - |
| 989 | xae = xa + wa; executed (the execution status of this line is deduced): xae = xa + wa; | - |
| 990 | xb = b->x; executed (the execution status of this line is deduced): xb = b->x; | - |
| 991 | xbe = xb + wb; executed (the execution status of this line is deduced): xbe = xb + wb; | - |
| 992 | xc0 = c->x; executed (the execution status of this line is deduced): xc0 = c->x; | - |
| 993 | #ifdef Pack_32 | - |
| 994 | for(; xb < xbe; xb++, xc0++) { evaluated: xb < xbe| yes Evaluation Count:5645 | yes Evaluation Count:3021 |
| 3021-5645 |
| 995 | if ((y = *xb & 0xffff) != 0) { partially evaluated: (y = *xb & 0xffff) != 0| yes Evaluation Count:5645 | no Evaluation Count:0 |
| 0-5645 |
| 996 | x = xa; executed (the execution status of this line is deduced): x = xa; | - |
| 997 | xc = xc0; executed (the execution status of this line is deduced): xc = xc0; | - |
| 998 | carry = 0; executed (the execution status of this line is deduced): carry = 0; | - |
| 999 | do { | - |
| 1000 | z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; executed (the execution status of this line is deduced): z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; | - |
| 1001 | carry = z >> 16; executed (the execution status of this line is deduced): carry = z >> 16; | - |
| 1002 | z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; executed (the execution status of this line is deduced): z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; | - |
| 1003 | carry = z2 >> 16; executed (the execution status of this line is deduced): carry = z2 >> 16; | - |
| 1004 | Storeinc(xc, z2, z); executed (the execution status of this line is deduced): Storeinc(xc, z2, z); | - |
| 1005 | } executed: }Execution Count:36492 | 36492 |
| 1006 | while(x < xae); evaluated: x < xae| yes Evaluation Count:30847 | yes Evaluation Count:5645 |
| 5645-30847 |
| 1007 | *xc = carry; executed (the execution status of this line is deduced): *xc = carry; | - |
| 1008 | } executed: }Execution Count:5645 | 5645 |
| 1009 | if ((y = *xb >> 16) != 0) { evaluated: (y = *xb >> 16) != 0| yes Evaluation Count:3376 | yes Evaluation Count:2269 |
| 2269-3376 |
| 1010 | x = xa; executed (the execution status of this line is deduced): x = xa; | - |
| 1011 | xc = xc0; executed (the execution status of this line is deduced): xc = xc0; | - |
| 1012 | carry = 0; executed (the execution status of this line is deduced): carry = 0; | - |
| 1013 | z2 = *xc; executed (the execution status of this line is deduced): z2 = *xc; | - |
| 1014 | do { | - |
| 1015 | z = (*x & 0xffff) * y + (*xc >> 16) + carry; executed (the execution status of this line is deduced): z = (*x & 0xffff) * y + (*xc >> 16) + carry; | - |
| 1016 | carry = z >> 16; executed (the execution status of this line is deduced): carry = z >> 16; | - |
| 1017 | Storeinc(xc, z, z2); executed (the execution status of this line is deduced): Storeinc(xc, z, z2); | - |
| 1018 | z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; executed (the execution status of this line is deduced): z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; | - |
| 1019 | carry = z2 >> 16; executed (the execution status of this line is deduced): carry = z2 >> 16; | - |
| 1020 | } executed: }Execution Count:30540 | 30540 |
| 1021 | while(x < xae); evaluated: x < xae| yes Evaluation Count:27164 | yes Evaluation Count:3376 |
| 3376-27164 |
| 1022 | *xc = z2; executed (the execution status of this line is deduced): *xc = z2; | - |
| 1023 | } executed: }Execution Count:3376 | 3376 |
| 1024 | } executed: }Execution Count:5645 | 5645 |
| 1025 | #else | - |
| 1026 | for(; xb < xbe; xc0++) { | - |
| 1027 | if (y = *xb++) { | - |
| 1028 | x = xa; | - |
| 1029 | xc = xc0; | - |
| 1030 | carry = 0; | - |
| 1031 | do { | - |
| 1032 | z = *x++ * y + *xc + carry; | - |
| 1033 | carry = z >> 16; | - |
| 1034 | *xc++ = z & 0xffff; | - |
| 1035 | } | - |
| 1036 | while(x < xae); | - |
| 1037 | *xc = carry; | - |
| 1038 | } | - |
| 1039 | } | - |
| 1040 | #endif | - |
| 1041 | for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; executed: ;Execution Count:2160 partially evaluated: wc > 0| yes Evaluation Count:5181 | no Evaluation Count:0 |
evaluated: !*--xc| yes Evaluation Count:2160 | yes Evaluation Count:3021 |
| 0-5181 |
| 1042 | c->wds = wc; executed (the execution status of this line is deduced): c->wds = wc; | - |
| 1043 | return c; executed: return c;Execution Count:3021 | 3021 |
| 1044 | } | - |
| 1045 | | - |
| 1046 | static Bigint *p5s; | - |
| 1047 | | - |
| 1048 | struct p5s_deleter | - |
| 1049 | { | - |
| 1050 | ~p5s_deleter() | - |
| 1051 | { | - |
| 1052 | while (p5s) { evaluated: p5s| yes Evaluation Count:29 | yes Evaluation Count:5 |
| 5-29 |
| 1053 | Bigint *next = p5s->next; executed (the execution status of this line is deduced): Bigint *next = p5s->next; | - |
| 1054 | Bfree(p5s); executed (the execution status of this line is deduced): Bfree(p5s); | - |
| 1055 | p5s = next; executed (the execution status of this line is deduced): p5s = next; | - |
| 1056 | } executed: }Execution Count:29 | 29 |
| 1057 | } executed: }Execution Count:5 | 5 |
| 1058 | }; | - |
| 1059 | | - |
| 1060 | static Bigint *pow5mult(Bigint *b, int k) | - |
| 1061 | { | - |
| 1062 | Bigint *b1, *p5, *p51; executed (the execution status of this line is deduced): Bigint *b1, *p5, *p51; | - |
| 1063 | int i; executed (the execution status of this line is deduced): int i; | - |
| 1064 | static const int p05[3] = { 5, 25, 125 }; | - |
| 1065 | | - |
| 1066 | if ((i = k & 3) != 0) evaluated: (i = k & 3) != 0| yes Evaluation Count:1487 | yes Evaluation Count:395 |
| 395-1487 |
| 1067 | #if defined(Q_OS_IRIX) && defined(Q_CC_GNU) | - |
| 1068 | { | - |
| 1069 | // work around a bug on 64 bit IRIX gcc | - |
| 1070 | int *p = (int *) p05; | - |
| 1071 | b = multadd(b, p[i-1], 0); | - |
| 1072 | } | - |
| 1073 | #else | - |
| 1074 | b = multadd(b, p05[i-1], 0); executed: b = multadd(b, p05[i-1], 0);Execution Count:1487 | 1487 |
| 1075 | #endif | - |
| 1076 | | - |
| 1077 | if (!(k >>= 2)) evaluated: !(k >>= 2)| yes Evaluation Count:622 | yes Evaluation Count:1260 |
| 622-1260 |
| 1078 | return b; executed: return b;Execution Count:622 | 622 |
| 1079 | if (!(p5 = p5s)) { evaluated: !(p5 = p5s)| yes Evaluation Count:5 | yes Evaluation Count:1255 |
| 5-1255 |
| 1080 | /* first time */ | - |
| 1081 | static p5s_deleter deleter; | - |
| 1082 | p5 = p5s = i2b(625); executed (the execution status of this line is deduced): p5 = p5s = i2b(625); | - |
| 1083 | p5->next = 0; executed (the execution status of this line is deduced): p5->next = 0; | - |
| 1084 | } executed: }Execution Count:5 | 5 |
| 1085 | for(;;) { executed (the execution status of this line is deduced): for(;;) { | - |
| 1086 | if (k & 1) { evaluated: k & 1| yes Evaluation Count:2910 | yes Evaluation Count:2376 |
| 2376-2910 |
| 1087 | b1 = mult(b, p5); executed (the execution status of this line is deduced): b1 = mult(b, p5); | - |
| 1088 | Bfree(b); executed (the execution status of this line is deduced): Bfree(b); | - |
| 1089 | b = b1; executed (the execution status of this line is deduced): b = b1; | - |
| 1090 | } executed: }Execution Count:2910 | 2910 |
| 1091 | if (!(k >>= 1)) evaluated: !(k >>= 1)| yes Evaluation Count:1260 | yes Evaluation Count:4026 |
| 1260-4026 |
| 1092 | break; executed: break;Execution Count:1260 | 1260 |
| 1093 | if (!(p51 = p5->next)) { evaluated: !(p51 = p5->next)| yes Evaluation Count:24 | yes Evaluation Count:4002 |
| 24-4002 |
| 1094 | p51 = p5->next = mult(p5,p5); executed (the execution status of this line is deduced): p51 = p5->next = mult(p5,p5); | - |
| 1095 | p51->next = 0; executed (the execution status of this line is deduced): p51->next = 0; | - |
| 1096 | } executed: }Execution Count:24 | 24 |
| 1097 | p5 = p51; executed (the execution status of this line is deduced): p5 = p51; | - |
| 1098 | } executed: }Execution Count:4026 | 4026 |
| 1099 | return b; executed: return b;Execution Count:1260 | 1260 |
| 1100 | } | - |
| 1101 | | - |
| 1102 | static Bigint *lshift(Bigint *b, int k) | - |
| 1103 | { | - |
| 1104 | int i, k1, n, n1; executed (the execution status of this line is deduced): int i, k1, n, n1; | - |
| 1105 | Bigint *b1; executed (the execution status of this line is deduced): Bigint *b1; | - |
| 1106 | ULong *x, *x1, *xe, z; executed (the execution status of this line is deduced): quint32 *x, *x1, *xe, z; | - |
| 1107 | | - |
| 1108 | #ifdef Pack_32 | - |
| 1109 | n = k >> 5; executed (the execution status of this line is deduced): n = k >> 5; | - |
| 1110 | #else | - |
| 1111 | n = k >> 4; | - |
| 1112 | #endif | - |
| 1113 | k1 = b->k; executed (the execution status of this line is deduced): k1 = b->k; | - |
| 1114 | n1 = n + b->wds + 1; executed (the execution status of this line is deduced): n1 = n + b->wds + 1; | - |
| 1115 | for(i = b->maxwds; n1 > i; i <<= 1) evaluated: n1 > i| yes Evaluation Count:5466 | yes Evaluation Count:6954 |
| 5466-6954 |
| 1116 | k1++; executed: k1++;Execution Count:5466 | 5466 |
| 1117 | b1 = Balloc(k1); executed (the execution status of this line is deduced): b1 = Balloc(k1); | - |
| 1118 | x1 = b1->x; executed (the execution status of this line is deduced): x1 = b1->x; | - |
| 1119 | for(i = 0; i < n; i++) evaluated: i < n| yes Evaluation Count:13897 | yes Evaluation Count:6954 |
| 6954-13897 |
| 1120 | *x1++ = 0; executed: *x1++ = 0;Execution Count:13897 | 13897 |
| 1121 | x = b->x; executed (the execution status of this line is deduced): x = b->x; | - |
| 1122 | xe = x + b->wds; executed (the execution status of this line is deduced): xe = x + b->wds; | - |
| 1123 | #ifdef Pack_32 | - |
| 1124 | if (k &= 0x1f) { evaluated: k &= 0x1f| yes Evaluation Count:6945 | yes Evaluation Count:9 |
| 9-6945 |
| 1125 | k1 = 32 - k; executed (the execution status of this line is deduced): k1 = 32 - k; | - |
| 1126 | z = 0; executed (the execution status of this line is deduced): z = 0; | - |
| 1127 | do { | - |
| 1128 | *x1++ = *x << k | z; executed (the execution status of this line is deduced): *x1++ = *x << k | z; | - |
| 1129 | z = *x++ >> k1; executed (the execution status of this line is deduced): z = *x++ >> k1; | - |
| 1130 | } executed: }Execution Count:26454 | 26454 |
| 1131 | while(x < xe); evaluated: x < xe| yes Evaluation Count:19509 | yes Evaluation Count:6945 |
| 6945-19509 |
| 1132 | if ((*x1 = z) != 0) evaluated: (*x1 = z) != 0| yes Evaluation Count:114 | yes Evaluation Count:6831 |
| 114-6831 |
| 1133 | ++n1; executed: ++n1;Execution Count:114 | 114 |
| 1134 | } executed: }Execution Count:6945 | 6945 |
| 1135 | #else | - |
| 1136 | if (k &= 0xf) { | - |
| 1137 | k1 = 16 - k; | - |
| 1138 | z = 0; | - |
| 1139 | do { | - |
| 1140 | *x1++ = *x << k & 0xffff | z; | - |
| 1141 | z = *x++ >> k1; | - |
| 1142 | } | - |
| 1143 | while(x < xe); | - |
| 1144 | if (*x1 = z) | - |
| 1145 | ++n1; | - |
| 1146 | } | - |
| 1147 | #endif | - |
| 1148 | else do | - |
| 1149 | *x1++ = *x++; executed: *x1++ = *x++;Execution Count:26 | 26 |
| 1150 | while(x < xe); evaluated: x < xe| yes Evaluation Count:17 | yes Evaluation Count:9 |
| 9-17 |
| 1151 | b1->wds = n1 - 1; executed (the execution status of this line is deduced): b1->wds = n1 - 1; | - |
| 1152 | Bfree(b); executed (the execution status of this line is deduced): Bfree(b); | - |
| 1153 | return b1; executed: return b1;Execution Count:6954 | 6954 |
| 1154 | } | - |
| 1155 | | - |
| 1156 | static int cmp(Bigint *a, Bigint *b) | - |
| 1157 | { | - |
| 1158 | ULong *xa, *xa0, *xb, *xb0; executed (the execution status of this line is deduced): quint32 *xa, *xa0, *xb, *xb0; | - |
| 1159 | int i, j; executed (the execution status of this line is deduced): int i, j; | - |
| 1160 | | - |
| 1161 | i = a->wds; executed (the execution status of this line is deduced): i = a->wds; | - |
| 1162 | j = b->wds; executed (the execution status of this line is deduced): j = b->wds; | - |
| 1163 | #ifdef BSD_QDTOA_DEBUG | - |
| 1164 | if (i > 1 && !a->x[i-1]) | - |
| 1165 | Bug("cmp called with a->x[a->wds-1] == 0"); | - |
| 1166 | if (j > 1 && !b->x[j-1]) | - |
| 1167 | Bug("cmp called with b->x[b->wds-1] == 0"); | - |
| 1168 | #endif | - |
| 1169 | if (i -= j) evaluated: i -= j| yes Evaluation Count:538 | yes Evaluation Count:124147 |
| 538-124147 |
| 1170 | return i; executed: return i;Execution Count:538 | 538 |
| 1171 | xa0 = a->x; executed (the execution status of this line is deduced): xa0 = a->x; | - |
| 1172 | xa = xa0 + j; executed (the execution status of this line is deduced): xa = xa0 + j; | - |
| 1173 | xb0 = b->x; executed (the execution status of this line is deduced): xb0 = b->x; | - |
| 1174 | xb = xb0 + j; executed (the execution status of this line is deduced): xb = xb0 + j; | - |
| 1175 | for(;;) { executed (the execution status of this line is deduced): for(;;) { | - |
| 1176 | if (*--xa != *--xb) evaluated: *--xa != *--xb| yes Evaluation Count:123564 | yes Evaluation Count:4221 |
| 4221-123564 |
| 1177 | return *xa < *xb ? -1 : 1; executed: return *xa < *xb ? -1 : 1;Execution Count:123564 | 123564 |
| 1178 | if (xa <= xa0) evaluated: xa <= xa0| yes Evaluation Count:583 | yes Evaluation Count:3638 |
| 583-3638 |
| 1179 | break; executed: break;Execution Count:583 | 583 |
| 1180 | } executed: }Execution Count:3638 | 3638 |
| 1181 | return 0; executed: return 0;Execution Count:583 | 583 |
| 1182 | } | - |
| 1183 | | - |
| 1184 | static Bigint *diff(Bigint *a, Bigint *b) | - |
| 1185 | { | - |
| 1186 | Bigint *c; executed (the execution status of this line is deduced): Bigint *c; | - |
| 1187 | int i, wa, wb; executed (the execution status of this line is deduced): int i, wa, wb; | - |
| 1188 | Long borrow, y; /* We need signed shifts here. */ executed (the execution status of this line is deduced): qint32 borrow, y; | - |
| 1189 | ULong *xa, *xae, *xb, *xbe, *xc; executed (the execution status of this line is deduced): quint32 *xa, *xae, *xb, *xbe, *xc; | - |
| 1190 | #ifdef Pack_32 | - |
| 1191 | Long z; executed (the execution status of this line is deduced): qint32 z; | - |
| 1192 | #endif | - |
| 1193 | | - |
| 1194 | i = cmp(a,b); executed (the execution status of this line is deduced): i = cmp(a,b); | - |
| 1195 | if (!i) { evaluated: !i| yes Evaluation Count:2 | yes Evaluation Count:161 |
| 2-161 |
| 1196 | c = Balloc(0); executed (the execution status of this line is deduced): c = Balloc(0); | - |
| 1197 | c->wds = 1; executed (the execution status of this line is deduced): c->wds = 1; | - |
| 1198 | c->x[0] = 0; executed (the execution status of this line is deduced): c->x[0] = 0; | - |
| 1199 | return c; executed: return c;Execution Count:2 | 2 |
| 1200 | } | - |
| 1201 | if (i < 0) { evaluated: i < 0| yes Evaluation Count:139 | yes Evaluation Count:22 |
| 22-139 |
| 1202 | c = a; executed (the execution status of this line is deduced): c = a; | - |
| 1203 | a = b; executed (the execution status of this line is deduced): a = b; | - |
| 1204 | b = c; executed (the execution status of this line is deduced): b = c; | - |
| 1205 | i = 1; executed (the execution status of this line is deduced): i = 1; | - |
| 1206 | } executed: }Execution Count:139 | 139 |
| 1207 | else | - |
| 1208 | i = 0; executed: i = 0;Execution Count:22 | 22 |
| 1209 | c = Balloc(a->k); executed (the execution status of this line is deduced): c = Balloc(a->k); | - |
| 1210 | c->sign = i; executed (the execution status of this line is deduced): c->sign = i; | - |
| 1211 | wa = a->wds; executed (the execution status of this line is deduced): wa = a->wds; | - |
| 1212 | xa = a->x; executed (the execution status of this line is deduced): xa = a->x; | - |
| 1213 | xae = xa + wa; executed (the execution status of this line is deduced): xae = xa + wa; | - |
| 1214 | wb = b->wds; executed (the execution status of this line is deduced): wb = b->wds; | - |
| 1215 | xb = b->x; executed (the execution status of this line is deduced): xb = b->x; | - |
| 1216 | xbe = xb + wb; executed (the execution status of this line is deduced): xbe = xb + wb; | - |
| 1217 | xc = c->x; executed (the execution status of this line is deduced): xc = c->x; | - |
| 1218 | borrow = 0; executed (the execution status of this line is deduced): borrow = 0; | - |
| 1219 | #ifdef Pack_32 | - |
| 1220 | do { | - |
| 1221 | y = (*xa & 0xffff) - (*xb & 0xffff) + borrow; executed (the execution status of this line is deduced): y = (*xa & 0xffff) - (*xb & 0xffff) + borrow; | - |
| 1222 | borrow = y >> 16; executed (the execution status of this line is deduced): borrow = y >> 16; | - |
| 1223 | Sign_Extend(borrow, y); | - |
| 1224 | z = (*xa++ >> 16) - (*xb++ >> 16) + borrow; executed (the execution status of this line is deduced): z = (*xa++ >> 16) - (*xb++ >> 16) + borrow; | - |
| 1225 | borrow = z >> 16; executed (the execution status of this line is deduced): borrow = z >> 16; | - |
| 1226 | Sign_Extend(borrow, z); | - |
| 1227 | Storeinc(xc, z, y); executed (the execution status of this line is deduced): Storeinc(xc, z, y); | - |
| 1228 | } executed: }Execution Count:2417 | 2417 |
| 1229 | while(xb < xbe); evaluated: xb < xbe| yes Evaluation Count:2256 | yes Evaluation Count:161 |
| 161-2256 |
| 1230 | while(xa < xae) { partially evaluated: xa < xae| no Evaluation Count:0 | yes Evaluation Count:161 |
| 0-161 |
| 1231 | y = (*xa & 0xffff) + borrow; never executed (the execution status of this line is deduced): y = (*xa & 0xffff) + borrow; | - |
| 1232 | borrow = y >> 16; never executed (the execution status of this line is deduced): borrow = y >> 16; | - |
| 1233 | Sign_Extend(borrow, y); | - |
| 1234 | z = (*xa++ >> 16) + borrow; never executed (the execution status of this line is deduced): z = (*xa++ >> 16) + borrow; | - |
| 1235 | borrow = z >> 16; never executed (the execution status of this line is deduced): borrow = z >> 16; | - |
| 1236 | Sign_Extend(borrow, z); | - |
| 1237 | Storeinc(xc, z, y); never executed (the execution status of this line is deduced): Storeinc(xc, z, y); | - |
| 1238 | } | 0 |
| 1239 | #else | - |
| 1240 | do { | - |
| 1241 | y = *xa++ - *xb++ + borrow; | - |
| 1242 | borrow = y >> 16; | - |
| 1243 | Sign_Extend(borrow, y); | - |
| 1244 | *xc++ = y & 0xffff; | - |
| 1245 | } | - |
| 1246 | while(xb < xbe); | - |
| 1247 | while(xa < xae) { | - |
| 1248 | y = *xa++ + borrow; | - |
| 1249 | borrow = y >> 16; | - |
| 1250 | Sign_Extend(borrow, y); | - |
| 1251 | *xc++ = y & 0xffff; | - |
| 1252 | } | - |
| 1253 | #endif | - |
| 1254 | while(!*--xc) evaluated: !*--xc| yes Evaluation Count:240 | yes Evaluation Count:161 |
| 161-240 |
| 1255 | wa--; executed: wa--;Execution Count:240 | 240 |
| 1256 | c->wds = wa; executed (the execution status of this line is deduced): c->wds = wa; | - |
| 1257 | return c; executed: return c;Execution Count:161 | 161 |
| 1258 | } | - |
| 1259 | | - |
| 1260 | static double ulp(double x) | - |
| 1261 | { | - |
| 1262 | Long L; executed (the execution status of this line is deduced): qint32 L; | - |
| 1263 | double a; executed (the execution status of this line is deduced): double a; | - |
| 1264 | | - |
| 1265 | L = (getWord0(x) & Exp_mask) - (P-1)*Exp_msk1; executed (the execution status of this line is deduced): L = (getWord0(x) & 0x7ff00000) - (53 -1)*0x100000; | - |
| 1266 | #ifndef Sudden_Underflow | - |
| 1267 | if (L > 0) { partially evaluated: L > 0| yes Evaluation Count:133 | no Evaluation Count:0 |
| 0-133 |
| 1268 | #endif | - |
| 1269 | #ifdef IBM | - |
| 1270 | L |= Exp_msk1 >> 4; | - |
| 1271 | #endif | - |
| 1272 | setWord0(&a, L); executed (the execution status of this line is deduced): setWord0(&a, L); | - |
| 1273 | setWord1(&a, 0); executed (the execution status of this line is deduced): setWord1(&a, 0); | - |
| 1274 | #ifndef Sudden_Underflow | - |
| 1275 | } executed: }Execution Count:133 | 133 |
| 1276 | else { | - |
| 1277 | L = -L >> Exp_shift; never executed (the execution status of this line is deduced): L = -L >> 20; | - |
| 1278 | if (L < Exp_shift) { | 0 |
| 1279 | setWord0(&a, 0x80000 >> L); never executed (the execution status of this line is deduced): setWord0(&a, 0x80000 >> L); | - |
| 1280 | setWord1(&a, 0); never executed (the execution status of this line is deduced): setWord1(&a, 0); | - |
| 1281 | } | 0 |
| 1282 | else { | - |
| 1283 | setWord0(&a, 0); never executed (the execution status of this line is deduced): setWord0(&a, 0); | - |
| 1284 | L -= Exp_shift; never executed (the execution status of this line is deduced): L -= 20; | - |
| 1285 | setWord1(&a, L >= 31 ? 1U : 1U << (31 - L)); never executed (the execution status of this line is deduced): setWord1(&a, L >= 31 ? 1U : 1U << (31 - L)); | - |
| 1286 | } | 0 |
| 1287 | } | - |
| 1288 | #endif | - |
| 1289 | return a; executed: return a;Execution Count:133 | 133 |
| 1290 | } | - |
| 1291 | | - |
| 1292 | static double b2d(Bigint *a, int *e) | - |
| 1293 | { | - |
| 1294 | ULong *xa, *xa0, w, y, z; executed (the execution status of this line is deduced): quint32 *xa, *xa0, w, y, z; | - |
| 1295 | int k; executed (the execution status of this line is deduced): int k; | - |
| 1296 | double d; executed (the execution status of this line is deduced): double d; | - |
| 1297 | | - |
| 1298 | xa0 = a->x; executed (the execution status of this line is deduced): xa0 = a->x; | - |
| 1299 | xa = xa0 + a->wds; executed (the execution status of this line is deduced): xa = xa0 + a->wds; | - |
| 1300 | y = *--xa; executed (the execution status of this line is deduced): y = *--xa; | - |
| 1301 | #ifdef BSD_QDTOA_DEBUG | - |
| 1302 | if (!y) Bug("zero y in b2d"); | - |
| 1303 | #endif | - |
| 1304 | k = hi0bits(y); executed (the execution status of this line is deduced): k = hi0bits(y); | - |
| 1305 | *e = 32 - k; executed (the execution status of this line is deduced): *e = 32 - k; | - |
| 1306 | #ifdef Pack_32 | - |
| 1307 | if (k < Ebits) { evaluated: k < 11| yes Evaluation Count:60 | yes Evaluation Count:206 |
| 60-206 |
| 1308 | setWord0(&d, Exp_1 | y >> (Ebits - k)); executed (the execution status of this line is deduced): setWord0(&d, 0x3ff00000 | y >> (11 - k)); | - |
| 1309 | w = xa > xa0 ? *--xa : 0; partially evaluated: xa > xa0| yes Evaluation Count:60 | no Evaluation Count:0 |
| 0-60 |
| 1310 | setWord1(&d, y << ((32-Ebits) + k) | w >> (Ebits - k)); executed (the execution status of this line is deduced): setWord1(&d, y << ((32-11) + k) | w >> (11 - k)); | - |
| 1311 | goto ret_d; executed: goto ret_d;Execution Count:60 | 60 |
| 1312 | } | - |
| 1313 | z = xa > xa0 ? *--xa : 0; evaluated: xa > xa0| yes Evaluation Count:204 | yes Evaluation Count:2 |
| 2-204 |
| 1314 | if (k -= Ebits) { evaluated: k -= 11| yes Evaluation Count:202 | yes Evaluation Count:4 |
| 4-202 |
| 1315 | setWord0(&d, Exp_1 | y << k | z >> (32 - k)); executed (the execution status of this line is deduced): setWord0(&d, 0x3ff00000 | y << k | z >> (32 - k)); | - |
| 1316 | y = xa > xa0 ? *--xa : 0; evaluated: xa > xa0| yes Evaluation Count:155 | yes Evaluation Count:47 |
| 47-155 |
| 1317 | setWord1(&d, z << k | y >> (32 - k)); executed (the execution status of this line is deduced): setWord1(&d, z << k | y >> (32 - k)); | - |
| 1318 | } executed: }Execution Count:202 | 202 |
| 1319 | else { | - |
| 1320 | setWord0(&d, Exp_1 | y); executed (the execution status of this line is deduced): setWord0(&d, 0x3ff00000 | y); | - |
| 1321 | setWord1(&d, z); executed (the execution status of this line is deduced): setWord1(&d, z); | - |
| 1322 | } executed: }Execution Count:4 | 4 |
| 1323 | #else | - |
| 1324 | if (k < Ebits + 16) { | - |
| 1325 | z = xa > xa0 ? *--xa : 0; | - |
| 1326 | setWord0(&d, Exp_1 | y << k - Ebits | z >> Ebits + 16 - k); | - |
| 1327 | w = xa > xa0 ? *--xa : 0; | - |
| 1328 | y = xa > xa0 ? *--xa : 0; | - |
| 1329 | setWord1(&d, z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k); | - |
| 1330 | goto ret_d; | - |
| 1331 | } | - |
| 1332 | z = xa > xa0 ? *--xa : 0; | - |
| 1333 | w = xa > xa0 ? *--xa : 0; | - |
| 1334 | k -= Ebits + 16; | - |
| 1335 | setWord0(&d, Exp_1 | y << k + 16 | z << k | w >> 16 - k); | - |
| 1336 | y = xa > xa0 ? *--xa : 0; | - |
| 1337 | setWord1(&d, w << k + 16 | y << k); | - |
| 1338 | #endif | - |
| 1339 | ret_d: | - |
| 1340 | return d; executed: return d;Execution Count:266 | 266 |
| 1341 | } | - |
| 1342 | | - |
| 1343 | static Bigint *d2b(double d, int *e, int *bits) | - |
| 1344 | { | - |
| 1345 | Bigint *b; executed (the execution status of this line is deduced): Bigint *b; | - |
| 1346 | int de, i, k; executed (the execution status of this line is deduced): int de, i, k; | - |
| 1347 | ULong *x, y, z; executed (the execution status of this line is deduced): quint32 *x, y, z; | - |
| 1348 | | - |
| 1349 | #ifdef Pack_32 | - |
| 1350 | b = Balloc(1); executed (the execution status of this line is deduced): b = Balloc(1); | - |
| 1351 | #else | - |
| 1352 | b = Balloc(2); | - |
| 1353 | #endif | - |
| 1354 | x = b->x; executed (the execution status of this line is deduced): x = b->x; | - |
| 1355 | | - |
| 1356 | z = getWord0(d) & Frac_mask; executed (the execution status of this line is deduced): z = getWord0(d) & 0xfffff; | - |
| 1357 | setWord0(&d, getWord0(d) & 0x7fffffff); /* clear sign bit, which we ignore */ executed (the execution status of this line is deduced): setWord0(&d, getWord0(d) & 0x7fffffff); | - |
| 1358 | #ifdef Sudden_Underflow | - |
| 1359 | de = (int)(getWord0(d) >> Exp_shift); | - |
| 1360 | #ifndef IBM | - |
| 1361 | z |= Exp_msk11; | - |
| 1362 | #endif | - |
| 1363 | #else | - |
| 1364 | if ((de = int(getWord0(d) >> Exp_shift)) != 0) evaluated: (de = int(getWord0(d) >> 20)) != 0| yes Evaluation Count:1463252 | yes Evaluation Count:12 |
| 12-1463252 |
| 1365 | z |= Exp_msk1; executed: z |= 0x100000;Execution Count:1463252 | 1463252 |
| 1366 | #endif | - |
| 1367 | #ifdef Pack_32 | - |
| 1368 | if ((y = getWord1(d)) != 0) { evaluated: (y = getWord1(d)) != 0| yes Evaluation Count:109936 | yes Evaluation Count:1353328 |
| 109936-1353328 |
| 1369 | if ((k = lo0bits(&y)) != 0) { evaluated: (k = lo0bits(&y)) != 0| yes Evaluation Count:103173 | yes Evaluation Count:6763 |
| 6763-103173 |
| 1370 | x[0] = y | z << (32 - k); executed (the execution status of this line is deduced): x[0] = y | z << (32 - k); | - |
| 1371 | z >>= k; executed (the execution status of this line is deduced): z >>= k; | - |
| 1372 | } executed: }Execution Count:103173 | 103173 |
| 1373 | else | - |
| 1374 | x[0] = y; executed: x[0] = y;Execution Count:6763 | 6763 |
| 1375 | i = b->wds = (x[1] = z) ? 2 : 1; evaluated: (x[1] = z)| yes Evaluation Count:13398 | yes Evaluation Count:96538 |
| 13398-96538 |
| 1376 | } executed: }Execution Count:109936 | 109936 |
| 1377 | else { | - |
| 1378 | #ifdef BSD_QDTOA_DEBUG | - |
| 1379 | if (!z) | - |
| 1380 | Bug("Zero passed to d2b"); | - |
| 1381 | #endif | - |
| 1382 | k = lo0bits(&z); executed (the execution status of this line is deduced): k = lo0bits(&z); | - |
| 1383 | x[0] = z; executed (the execution status of this line is deduced): x[0] = z; | - |
| 1384 | i = b->wds = 1; executed (the execution status of this line is deduced): i = b->wds = 1; | - |
| 1385 | k += 32; executed (the execution status of this line is deduced): k += 32; | - |
| 1386 | } executed: }Execution Count:1353328 | 1353328 |
| 1387 | #else | - |
| 1388 | if (y = getWord1(d)) { | - |
| 1389 | if (k = lo0bits(&y)) | - |
| 1390 | if (k >= 16) { | - |
| 1391 | x[0] = y | z << 32 - k & 0xffff; | - |
| 1392 | x[1] = z >> k - 16 & 0xffff; | - |
| 1393 | x[2] = z >> k; | - |
| 1394 | i = 2; | - |
| 1395 | } | - |
| 1396 | else { | - |
| 1397 | x[0] = y & 0xffff; | - |
| 1398 | x[1] = y >> 16 | z << 16 - k & 0xffff; | - |
| 1399 | x[2] = z >> k & 0xffff; | - |
| 1400 | x[3] = z >> k+16; | - |
| 1401 | i = 3; | - |
| 1402 | } | - |
| 1403 | else { | - |
| 1404 | x[0] = y & 0xffff; | - |
| 1405 | x[1] = y >> 16; | - |
| 1406 | x[2] = z & 0xffff; | - |
| 1407 | x[3] = z >> 16; | - |
| 1408 | i = 3; | - |
| 1409 | } | - |
| 1410 | } | - |
| 1411 | else { | - |
| 1412 | #ifdef BSD_QDTOA_DEBUG | - |
| 1413 | if (!z) | - |
| 1414 | Bug("Zero passed to d2b"); | - |
| 1415 | #endif | - |
| 1416 | k = lo0bits(&z); | - |
| 1417 | if (k >= 16) { | - |
| 1418 | x[0] = z; | - |
| 1419 | i = 0; | - |
| 1420 | } | - |
| 1421 | else { | - |
| 1422 | x[0] = z & 0xffff; | - |
| 1423 | x[1] = z >> 16; | - |
| 1424 | i = 1; | - |
| 1425 | } | - |
| 1426 | k += 32; | - |
| 1427 | } | - |
| 1428 | while(!x[i]) | - |
| 1429 | --i; | - |
| 1430 | b->wds = i + 1; | - |
| 1431 | #endif | - |
| 1432 | #ifndef Sudden_Underflow | - |
| 1433 | if (de) { evaluated: de| yes Evaluation Count:1463252 | yes Evaluation Count:12 |
| 12-1463252 |
| 1434 | #endif | - |
| 1435 | #ifdef IBM | - |
| 1436 | *e = (de - Bias - (P-1) << 2) + k; | - |
| 1437 | *bits = 4*P + 8 - k - hi0bits(getWord0(d) & Frac_mask); | - |
| 1438 | #else | - |
| 1439 | *e = de - Bias - (P-1) + k; executed (the execution status of this line is deduced): *e = de - 1023 - (53 -1) + k; | - |
| 1440 | *bits = P - k; executed (the execution status of this line is deduced): *bits = 53 - k; | - |
| 1441 | #endif | - |
| 1442 | #ifndef Sudden_Underflow | - |
| 1443 | } executed: }Execution Count:1463252 | 1463252 |
| 1444 | else { | - |
| 1445 | *e = de - Bias - (P-1) + 1 + k; executed (the execution status of this line is deduced): *e = de - 1023 - (53 -1) + 1 + k; | - |
| 1446 | #ifdef Pack_32 | - |
| 1447 | *bits = 32*i - hi0bits(x[i-1]); executed (the execution status of this line is deduced): *bits = 32*i - hi0bits(x[i-1]); | - |
| 1448 | #else | - |
| 1449 | *bits = (i+2)*16 - hi0bits(x[i]); | - |
| 1450 | #endif | - |
| 1451 | } executed: }Execution Count:12 | 12 |
| 1452 | #endif | - |
| 1453 | return b; executed: return b;Execution Count:1463264 | 1463264 |
| 1454 | } | - |
| 1455 | | - |
| 1456 | static double ratio(Bigint *a, Bigint *b) | - |
| 1457 | { | - |
| 1458 | double da, db; executed (the execution status of this line is deduced): double da, db; | - |
| 1459 | int k, ka, kb; executed (the execution status of this line is deduced): int k, ka, kb; | - |
| 1460 | | - |
| 1461 | da = b2d(a, &ka); executed (the execution status of this line is deduced): da = b2d(a, &ka); | - |
| 1462 | db = b2d(b, &kb); executed (the execution status of this line is deduced): db = b2d(b, &kb); | - |
| 1463 | #ifdef Pack_32 | - |
| 1464 | k = ka - kb + 32*(a->wds - b->wds); executed (the execution status of this line is deduced): k = ka - kb + 32*(a->wds - b->wds); | - |
| 1465 | #else | - |
| 1466 | k = ka - kb + 16*(a->wds - b->wds); | - |
| 1467 | #endif | - |
| 1468 | #ifdef IBM | - |
| 1469 | if (k > 0) { | - |
| 1470 | setWord0(&da, getWord0(da) + (k >> 2)*Exp_msk1); | - |
| 1471 | if (k &= 3) | - |
| 1472 | da *= 1 << k; | - |
| 1473 | } | - |
| 1474 | else { | - |
| 1475 | k = -k; | - |
| 1476 | setWord0(&db, getWord0(db) + (k >> 2)*Exp_msk1); | - |
| 1477 | if (k &= 3) | - |
| 1478 | db *= 1 << k; | - |
| 1479 | } | - |
| 1480 | #else | - |
| 1481 | if (k > 0) evaluated: k > 0| yes Evaluation Count:125 | yes Evaluation Count:8 |
| 8-125 |
| 1482 | setWord0(&da, getWord0(da) + k*Exp_msk1); executed: setWord0(&da, getWord0(da) + k*0x100000);Execution Count:125 | 125 |
| 1483 | else { | - |
| 1484 | k = -k; executed (the execution status of this line is deduced): k = -k; | - |
| 1485 | setWord0(&db, getWord0(db) + k*Exp_msk1); executed (the execution status of this line is deduced): setWord0(&db, getWord0(db) + k*0x100000); | - |
| 1486 | } executed: }Execution Count:8 | 8 |
| 1487 | #endif | - |
| 1488 | return da / db; executed: return da / db;Execution Count:133 | 133 |
| 1489 | } | - |
| 1490 | | - |
| 1491 | static const double tens[] = { | - |
| 1492 | 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, | - |
| 1493 | 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, | - |
| 1494 | 1e20, 1e21, 1e22 | - |
| 1495 | #ifdef VAX | - |
| 1496 | , 1e23, 1e24 | - |
| 1497 | #endif | - |
| 1498 | }; | - |
| 1499 | | - |
| 1500 | #ifdef IEEE_Arith | - |
| 1501 | static const double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; | - |
| 1502 | static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 }; | - |
| 1503 | #define n_bigtens 5 | - |
| 1504 | #else | - |
| 1505 | #ifdef IBM | - |
| 1506 | static const double bigtens[] = { 1e16, 1e32, 1e64 }; | - |
| 1507 | static const double tinytens[] = { 1e-16, 1e-32, 1e-64 }; | - |
| 1508 | #define n_bigtens 3 | - |
| 1509 | #else | - |
| 1510 | static const double bigtens[] = { 1e16, 1e32 }; | - |
| 1511 | static const double tinytens[] = { 1e-16, 1e-32 }; | - |
| 1512 | #define n_bigtens 2 | - |
| 1513 | #endif | - |
| 1514 | #endif | - |
| 1515 | | - |
| 1516 | /* | - |
| 1517 | The pre-release gcc3.3 shipped with SuSE 8.2 has a bug which causes | - |
| 1518 | the comparison 1e-100 == 0.0 to return true. As a workaround, we | - |
| 1519 | compare it to a global variable containing 0.0, which produces | - |
| 1520 | correct assembler output. | - |
| 1521 | | - |
| 1522 | ### consider detecting the broken compilers and using the static | - |
| 1523 | ### double for these, and use a #define for all working compilers | - |
| 1524 | */ | - |
| 1525 | static double g_double_zero = 0.0; | - |
| 1526 | | - |
| 1527 | Q_CORE_EXPORT double qstrtod(const char *s00, const char **se, bool *ok) | - |
| 1528 | { | - |
| 1529 | int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, executed (the execution status of this line is deduced): int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, | - |
| 1530 | e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; executed (the execution status of this line is deduced): e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; | - |
| 1531 | const char *s, *s0, *s1; executed (the execution status of this line is deduced): const char *s, *s0, *s1; | - |
| 1532 | double aadj, aadj1, adj, rv, rv0; executed (the execution status of this line is deduced): double aadj, aadj1, adj, rv, rv0; | - |
| 1533 | Long L; executed (the execution status of this line is deduced): qint32 L; | - |
| 1534 | ULong y, z; executed (the execution status of this line is deduced): quint32 y, z; | - |
| 1535 | Bigint *bb1, *bd0; executed (the execution status of this line is deduced): Bigint *bb1, *bd0; | - |
| 1536 | Bigint *bb = NULL, *bd = NULL, *bs = NULL, *delta = NULL;/* pacify gcc */ executed (the execution status of this line is deduced): Bigint *bb = __null, *bd = __null, *bs = __null, *delta = __null; | - |
| 1537 | | - |
| 1538 | /* | - |
| 1539 | #ifndef KR_headers | - |
| 1540 | const char decimal_point = localeconv()->decimal_point[0]; | - |
| 1541 | #else | - |
| 1542 | const char decimal_point = '.'; | - |
| 1543 | #endif */ | - |
| 1544 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:4149 | no Evaluation Count:0 |
| 0-4149 |
| 1545 | *ok = true; executed: *ok = true;Execution Count:4149 | 4149 |
| 1546 | | - |
| 1547 | const char decimal_point = '.'; executed (the execution status of this line is deduced): const char decimal_point = '.'; | - |
| 1548 | | - |
| 1549 | sign = nz0 = nz = 0; executed (the execution status of this line is deduced): sign = nz0 = nz = 0; | - |
| 1550 | rv = 0.; executed (the execution status of this line is deduced): rv = 0.; | - |
| 1551 | | - |
| 1552 | | - |
| 1553 | for(s = s00; isspace(uchar(*s)); s++) partially evaluated: isspace(uchar(*s))| no Evaluation Count:0 | yes Evaluation Count:4149 |
| 0-4149 |
| 1554 | ; | 0 |
| 1555 | | - |
| 1556 | if (*s == '-') { evaluated: *s == '-'| yes Evaluation Count:411 | yes Evaluation Count:3738 |
| 411-3738 |
| 1557 | sign = 1; executed (the execution status of this line is deduced): sign = 1; | - |
| 1558 | s++; executed (the execution status of this line is deduced): s++; | - |
| 1559 | } else if (*s == '+') { executed: }Execution Count:411 evaluated: *s == '+'| yes Evaluation Count:7 | yes Evaluation Count:3731 |
| 7-3731 |
| 1560 | s++; executed (the execution status of this line is deduced): s++; | - |
| 1561 | } executed: }Execution Count:7 | 7 |
| 1562 | | - |
| 1563 | if (*s == '\0') { evaluated: *s == '\0'| yes Evaluation Count:8 | yes Evaluation Count:4141 |
| 8-4141 |
| 1564 | s = s00; executed (the execution status of this line is deduced): s = s00; | - |
| 1565 | goto ret; executed: goto ret;Execution Count:8 | 8 |
| 1566 | } | - |
| 1567 | | - |
| 1568 | if (*s == '0') { evaluated: *s == '0'| yes Evaluation Count:1529 | yes Evaluation Count:2612 |
| 1529-2612 |
| 1569 | nz0 = 1; executed (the execution status of this line is deduced): nz0 = 1; | - |
| 1570 | while(*++s == '0') ; executed: ;Execution Count:81 evaluated: *++s == '0'| yes Evaluation Count:81 | yes Evaluation Count:1529 |
| 81-1529 |
| 1571 | if (!*s) evaluated: !*s| yes Evaluation Count:739 | yes Evaluation Count:790 |
| 739-790 |
| 1572 | goto ret; executed: goto ret;Execution Count:739 | 739 |
| 1573 | } executed: }Execution Count:790 | 790 |
| 1574 | s0 = s; executed (the execution status of this line is deduced): s0 = s; | - |
| 1575 | y = z = 0; executed (the execution status of this line is deduced): y = z = 0; | - |
| 1576 | for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) evaluated: (c = *s) >= '0'| yes Evaluation Count:26429 | yes Evaluation Count:3065 |
evaluated: c <= '9'| yes Evaluation Count:26092 | yes Evaluation Count:337 |
| 337-26429 |
| 1577 | if (nd < 9) evaluated: nd < 9| yes Evaluation Count:7607 | yes Evaluation Count:18485 |
| 7607-18485 |
| 1578 | y = 10*y + c - '0'; executed: y = 10*y + c - '0';Execution Count:7607 | 7607 |
| 1579 | else if (nd < 16) evaluated: nd < 16| yes Evaluation Count:1464 | yes Evaluation Count:17021 |
| 1464-17021 |
| 1580 | z = 10*z + c - '0'; executed: z = 10*z + c - '0';Execution Count:1464 | 1464 |
| 1581 | nd0 = nd; executed (the execution status of this line is deduced): nd0 = nd; | - |
| 1582 | if (c == decimal_point) { evaluated: c == decimal_point| yes Evaluation Count:1804 | yes Evaluation Count:1598 |
| 1598-1804 |
| 1583 | c = *++s; executed (the execution status of this line is deduced): c = *++s; | - |
| 1584 | if (!nd) { evaluated: !nd| yes Evaluation Count:809 | yes Evaluation Count:995 |
| 809-995 |
| 1585 | for(; c == '0'; c = *++s) evaluated: c == '0'| yes Evaluation Count:3382 | yes Evaluation Count:809 |
| 809-3382 |
| 1586 | nz++; executed: nz++;Execution Count:3382 | 3382 |
| 1587 | if (c > '0' && c <= '9') { evaluated: c > '0'| yes Evaluation Count:263 | yes Evaluation Count:546 |
evaluated: c <= '9'| yes Evaluation Count:260 | yes Evaluation Count:3 |
| 3-546 |
| 1588 | s0 = s; executed (the execution status of this line is deduced): s0 = s; | - |
| 1589 | nf += nz; executed (the execution status of this line is deduced): nf += nz; | - |
| 1590 | nz = 0; executed (the execution status of this line is deduced): nz = 0; | - |
| 1591 | goto have_dig; executed: goto have_dig;Execution Count:260 | 260 |
| 1592 | } | - |
| 1593 | goto dig_done; executed: goto dig_done;Execution Count:549 | 549 |
| 1594 | } | - |
| 1595 | for(; c >= '0' && c <= '9'; c = *++s) { evaluated: c >= '0'| yes Evaluation Count:7102 | yes Evaluation Count:1213 |
evaluated: c <= '9'| yes Evaluation Count:7060 | yes Evaluation Count:42 |
| 42-7102 |
| 1596 | have_dig: | - |
| 1597 | nz++; executed (the execution status of this line is deduced): nz++; | - |
| 1598 | if (c -= '0') { evaluated: c -= '0'| yes Evaluation Count:3043 | yes Evaluation Count:4277 |
| 3043-4277 |
| 1599 | nf += nz; executed (the execution status of this line is deduced): nf += nz; | - |
| 1600 | for(i = 1; i < nz; i++) evaluated: i < nz| yes Evaluation Count:101 | yes Evaluation Count:3043 |
| 101-3043 |
| 1601 | if (nd++ < 9) evaluated: nd++ < 9| yes Evaluation Count:56 | yes Evaluation Count:45 |
| 45-56 |
| 1602 | y *= 10; executed: y *= 10;Execution Count:56 | 56 |
| 1603 | else if (nd <= DBL_DIG + 1) evaluated: nd <= 15 + 1| yes Evaluation Count:15 | yes Evaluation Count:30 |
| 15-30 |
| 1604 | z *= 10; executed: z *= 10;Execution Count:15 | 15 |
| 1605 | if (nd++ < 9) evaluated: nd++ < 9| yes Evaluation Count:1729 | yes Evaluation Count:1314 |
| 1314-1729 |
| 1606 | y = 10*y + c; executed: y = 10*y + c;Execution Count:1729 | 1729 |
| 1607 | else if (nd <= DBL_DIG + 1) evaluated: nd <= 15 + 1| yes Evaluation Count:640 | yes Evaluation Count:674 |
| 640-674 |
| 1608 | z = 10*z + c; executed: z = 10*z + c;Execution Count:640 | 640 |
| 1609 | nz = 0; executed (the execution status of this line is deduced): nz = 0; | - |
| 1610 | } executed: }Execution Count:3043 | 3043 |
| 1611 | } executed: }Execution Count:7320 | 7320 |
| 1612 | } executed: }Execution Count:1255 | 1255 |
| 1613 | dig_done: code before this statement executed: dig_done:Execution Count:2853 | 2853 |
| 1614 | e = 0; executed (the execution status of this line is deduced): e = 0; | - |
| 1615 | if (c == 'e' || c == 'E') { evaluated: c == 'e'| yes Evaluation Count:147 | yes Evaluation Count:3255 |
evaluated: c == 'E'| yes Evaluation Count:10 | yes Evaluation Count:3245 |
| 10-3255 |
| 1616 | if (!nd && !nz && !nz0) { evaluated: !nd| yes Evaluation Count:20 | yes Evaluation Count:137 |
partially evaluated: !nz| yes Evaluation Count:20 | no Evaluation Count:0 |
partially evaluated: !nz0| yes Evaluation Count:20 | no Evaluation Count:0 |
| 0-137 |
| 1617 | s = s00; executed (the execution status of this line is deduced): s = s00; | - |
| 1618 | goto ret; executed: goto ret;Execution Count:20 | 20 |
| 1619 | } | - |
| 1620 | s00 = s; executed (the execution status of this line is deduced): s00 = s; | - |
| 1621 | esign = 0; executed (the execution status of this line is deduced): esign = 0; | - |
| 1622 | switch(c = *++s) { | - |
| 1623 | case '-': | - |
| 1624 | esign = 1; executed (the execution status of this line is deduced): esign = 1; | - |
| 1625 | case '+': code before this statement executed: case '+':Execution Count:42 | 42 |
| 1626 | c = *++s; executed (the execution status of this line is deduced): c = *++s; | - |
| 1627 | } executed: }Execution Count:88 | 88 |
| 1628 | if (c >= '0' && c <= '9') { evaluated: c >= '0'| yes Evaluation Count:112 | yes Evaluation Count:25 |
evaluated: c <= '9'| yes Evaluation Count:111 | yes Evaluation Count:1 |
| 1-112 |
| 1629 | while(c == '0') evaluated: c == '0'| yes Evaluation Count:34 | yes Evaluation Count:111 |
| 34-111 |
| 1630 | c = *++s; executed: c = *++s;Execution Count:34 | 34 |
| 1631 | if (c > '0' && c <= '9') { evaluated: c > '0'| yes Evaluation Count:99 | yes Evaluation Count:12 |
partially evaluated: c <= '9'| yes Evaluation Count:99 | no Evaluation Count:0 |
| 0-99 |
| 1632 | L = c - '0'; executed (the execution status of this line is deduced): L = c - '0'; | - |
| 1633 | s1 = s; executed (the execution status of this line is deduced): s1 = s; | - |
| 1634 | while((c = *++s) >= '0' && c <= '9') evaluated: (c = *++s) >= '0'| yes Evaluation Count:74 | yes Evaluation Count:99 |
partially evaluated: c <= '9'| yes Evaluation Count:74 | no Evaluation Count:0 |
| 0-99 |
| 1635 | L = 10*L + c - '0'; executed: L = 10*L + c - '0';Execution Count:74 | 74 |
| 1636 | if (s - s1 > 8 || L > 19999) partially evaluated: s - s1 > 8| no Evaluation Count:0 | yes Evaluation Count:99 |
partially evaluated: L > 19999| no Evaluation Count:0 | yes Evaluation Count:99 |
| 0-99 |
| 1637 | /* Avoid confusion from exponents | - |
| 1638 | * so large that e might overflow. | - |
| 1639 | */ | - |
| 1640 | e = 19999; /* safe for 16 bit ints */ never executed: e = 19999; | 0 |
| 1641 | else | - |
| 1642 | e = int(L); executed: e = int(L);Execution Count:99 | 99 |
| 1643 | if (esign) evaluated: esign| yes Evaluation Count:31 | yes Evaluation Count:68 |
| 31-68 |
| 1644 | e = -e; executed: e = -e;Execution Count:31 | 31 |
| 1645 | } executed: }Execution Count:99 | 99 |
| 1646 | else | - |
| 1647 | e = 0; executed: e = 0;Execution Count:12 | 12 |
| 1648 | } | - |
| 1649 | else | - |
| 1650 | s = s00; executed: s = s00;Execution Count:26 | 26 |
| 1651 | } | - |
| 1652 | if (!nd) { evaluated: !nd| yes Evaluation Count:770 | yes Evaluation Count:2612 |
| 770-2612 |
| 1653 | if (!nz && !nz0) evaluated: !nz| yes Evaluation Count:307 | yes Evaluation Count:463 |
evaluated: !nz0| yes Evaluation Count:225 | yes Evaluation Count:82 |
| 82-463 |
| 1654 | s = s00; executed: s = s00;Execution Count:225 | 225 |
| 1655 | goto ret; executed: goto ret;Execution Count:770 | 770 |
| 1656 | } | - |
| 1657 | e1 = e -= nf; executed (the execution status of this line is deduced): e1 = e -= nf; | - |
| 1658 | | - |
| 1659 | /* Now we have nd0 digits, starting at s0, followed by a | - |
| 1660 | * decimal point, followed by nd-nd0 digits. The number we're | - |
| 1661 | * after is the integer represented by those digits times | - |
| 1662 | * 10**e */ | - |
| 1663 | | - |
| 1664 | if (!nd0) evaluated: !nd0| yes Evaluation Count:260 | yes Evaluation Count:2352 |
| 260-2352 |
| 1665 | nd0 = nd; executed: nd0 = nd;Execution Count:260 | 260 |
| 1666 | k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; evaluated: nd < 15 + 1| yes Evaluation Count:2463 | yes Evaluation Count:149 |
| 149-2463 |
| 1667 | rv = y; executed (the execution status of this line is deduced): rv = y; | - |
| 1668 | if (k > 9) evaluated: k > 9| yes Evaluation Count:488 | yes Evaluation Count:2124 |
| 488-2124 |
| 1669 | #if defined(Q_OS_IRIX) && defined(Q_CC_GNU) | - |
| 1670 | { | - |
| 1671 | // work around a bug on 64 bit IRIX gcc | - |
| 1672 | double *t = (double *) tens; | - |
| 1673 | rv = t[k - 9] * rv + z; | - |
| 1674 | } | - |
| 1675 | #else | - |
| 1676 | rv = tens[k - 9] * rv + z; executed: rv = tens[k - 9] * rv + z;Execution Count:488 | 488 |
| 1677 | #endif | - |
| 1678 | | - |
| 1679 | bd0 = 0; executed (the execution status of this line is deduced): bd0 = 0; | - |
| 1680 | if (nd <= DBL_DIG evaluated: nd <= 15| yes Evaluation Count:2463 | yes Evaluation Count:149 |
| 149-2463 |
| 1681 | #ifndef RND_PRODQUOT executed (the execution status of this line is deduced): | - |
| 1682 | && FLT_ROUNDS == 1 partially evaluated: 1 == 1| yes Evaluation Count:2463 | no Evaluation Count:0 |
| 0-2463 |
| 1683 | #endif | - |
| 1684 | ) { | - |
| 1685 | if (!e) evaluated: !e| yes Evaluation Count:1945 | yes Evaluation Count:518 |
| 518-1945 |
| 1686 | goto ret; executed: goto ret;Execution Count:1945 | 1945 |
| 1687 | if (e > 0) { evaluated: e > 0| yes Evaluation Count:55 | yes Evaluation Count:463 |
| 55-463 |
| 1688 | if (e <= Ten_pmax) { evaluated: e <= 22| yes Evaluation Count:39 | yes Evaluation Count:16 |
| 16-39 |
| 1689 | #ifdef VAX | - |
| 1690 | goto vax_ovfl_check; | - |
| 1691 | #else | - |
| 1692 | /* rv = */ rounded_product(rv, tens[e]); executed (the execution status of this line is deduced): rv *= tens[e]; | - |
| 1693 | goto ret; executed: goto ret;Execution Count:39 | 39 |
| 1694 | #endif | - |
| 1695 | } | - |
| 1696 | i = DBL_DIG - nd; executed (the execution status of this line is deduced): i = 15 - nd; | - |
| 1697 | if (e <= Ten_pmax + i) { evaluated: e <= 22 + i| yes Evaluation Count:4 | yes Evaluation Count:12 |
| 4-12 |
| 1698 | /* A fancier test would sometimes let us do | - |
| 1699 | * this for larger i values. | - |
| 1700 | */ | - |
| 1701 | e -= i; executed (the execution status of this line is deduced): e -= i; | - |
| 1702 | rv *= tens[i]; executed (the execution status of this line is deduced): rv *= tens[i]; | - |
| 1703 | #ifdef VAX | - |
| 1704 | /* VAX exponent range is so narrow we must | - |
| 1705 | * worry about overflow here... | - |
| 1706 | */ | - |
| 1707 | vax_ovfl_check: | - |
| 1708 | setWord0(&rv, getWord0(rv) - P*Exp_msk1); | - |
| 1709 | /* rv = */ rounded_product(rv, tens[e]); | - |
| 1710 | if ((getWord0(rv) & Exp_mask) | - |
| 1711 | > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) | - |
| 1712 | goto ovfl; | - |
| 1713 | setWord0(&rv, getWord0(rv) + P*Exp_msk1); | - |
| 1714 | #else | - |
| 1715 | /* rv = */ rounded_product(rv, tens[e]); executed (the execution status of this line is deduced): rv *= tens[e]; | - |
| 1716 | #endif | - |
| 1717 | goto ret; executed: goto ret;Execution Count:4 | 4 |
| 1718 | } | - |
| 1719 | } executed: }Execution Count:12 | 12 |
| 1720 | #ifndef Inaccurate_Divide | - |
| 1721 | else if (e >= -Ten_pmax) { evaluated: e >= -22| yes Evaluation Count:459 | yes Evaluation Count:4 |
| 4-459 |
| 1722 | /* rv = */ rounded_quotient(rv, tens[-e]); executed (the execution status of this line is deduced): rv /= tens[-e]; | - |
| 1723 | goto ret; executed: goto ret;Execution Count:459 | 459 |
| 1724 | } | - |
| 1725 | #endif | - |
| 1726 | } | - |
| 1727 | e1 += nd - k; executed (the execution status of this line is deduced): e1 += nd - k; | - |
| 1728 | | - |
| 1729 | /* Get starting approximation = rv * 10**e1 */ | - |
| 1730 | | - |
| 1731 | if (e1 > 0) { evaluated: e1 > 0| yes Evaluation Count:78 | yes Evaluation Count:87 |
| 78-87 |
| 1732 | if ((i = e1 & 15) != 0) evaluated: (i = e1 & 15) != 0| yes Evaluation Count:77 | yes Evaluation Count:1 |
| 1-77 |
| 1733 | rv *= tens[i]; executed: rv *= tens[i];Execution Count:77 | 77 |
| 1734 | if (e1 &= ~15) { evaluated: e1 &= ~15| yes Evaluation Count:77 | yes Evaluation Count:1 |
| 1-77 |
| 1735 | if (e1 > DBL_MAX_10_EXP) { evaluated: e1 > 308| yes Evaluation Count:2 | yes Evaluation Count:75 |
| 2-75 |
| 1736 | ovfl: | - |
| 1737 | // errno = ERANGE; | - |
| 1738 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
| 1739 | *ok = false; executed: *ok = false;Execution Count:2 | 2 |
| 1740 | #ifdef __STDC__ | - |
| 1741 | rv = HUGE_VAL; executed (the execution status of this line is deduced): rv = (__builtin_huge_val()); | - |
| 1742 | #else | - |
| 1743 | /* Can't trust HUGE_VAL */ | - |
| 1744 | #ifdef IEEE_Arith | - |
| 1745 | setWord0(&rv, Exp_mask); | - |
| 1746 | setWord1(&rv, 0); | - |
| 1747 | #else | - |
| 1748 | setWord0(&rv, Big0); | - |
| 1749 | setWord1(&rv, Big1); | - |
| 1750 | #endif | - |
| 1751 | #endif | - |
| 1752 | if (bd0) partially evaluated: bd0| no Evaluation Count:0 | yes Evaluation Count:2 |
| 0-2 |
| 1753 | goto retfree; never executed: goto retfree; | 0 |
| 1754 | goto ret; executed: goto ret;Execution Count:2 | 2 |
| 1755 | } | - |
| 1756 | if (e1 >>= 4) { partially evaluated: e1 >>= 4| yes Evaluation Count:75 | no Evaluation Count:0 |
| 0-75 |
| 1757 | for(j = 0; e1 > 1; j++, e1 >>= 1) evaluated: e1 > 1| yes Evaluation Count:264 | yes Evaluation Count:75 |
| 75-264 |
| 1758 | if (e1 & 1) evaluated: e1 & 1| yes Evaluation Count:70 | yes Evaluation Count:194 |
| 70-194 |
| 1759 | rv *= bigtens[j]; executed: rv *= bigtens[j];Execution Count:70 | 70 |
| 1760 | /* The last multiplication could overflow. */ | - |
| 1761 | setWord0(&rv, getWord0(rv) - P*Exp_msk1); executed (the execution status of this line is deduced): setWord0(&rv, getWord0(rv) - 53*0x100000); | - |
| 1762 | rv *= bigtens[j]; executed (the execution status of this line is deduced): rv *= bigtens[j]; | - |
| 1763 | if ((z = getWord0(rv) & Exp_mask) partially evaluated: (z = getWord0(rv) & 0x7ff00000) > 0x100000*(1024 +1023 -53)| no Evaluation Count:0 | yes Evaluation Count:75 |
| 0-75 |
| 1764 | > Exp_msk1*(DBL_MAX_EXP+Bias-P)) partially evaluated: (z = getWord0(rv) & 0x7ff00000) > 0x100000*(1024 +1023 -53)| no Evaluation Count:0 | yes Evaluation Count:75 |
| 0-75 |
| 1765 | goto ovfl; never executed: goto ovfl; | 0 |
| 1766 | if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { partially evaluated: z > 0x100000*(1024 +1023 -1-53)| no Evaluation Count:0 | yes Evaluation Count:75 |
| 0-75 |
| 1767 | /* set to largest number */ | - |
| 1768 | /* (Can't trust DBL_MAX) */ | - |
| 1769 | setWord0(&rv, Big0); never executed (the execution status of this line is deduced): setWord0(&rv, (0xfffff | 0x100000*(1024 +1023 -1))); | - |
| 1770 | setWord1(&rv, Big1); never executed (the execution status of this line is deduced): setWord1(&rv, 0xffffffff); | - |
| 1771 | } | 0 |
| 1772 | else | - |
| 1773 | setWord0(&rv, getWord0(rv) + P*Exp_msk1); executed: setWord0(&rv, getWord0(rv) + 53*0x100000);Execution Count:75 | 75 |
| 1774 | } | - |
| 1775 | | - |
| 1776 | } executed: }Execution Count:75 | 75 |
| 1777 | } executed: }Execution Count:76 | 76 |
| 1778 | else if (e1 < 0) { partially evaluated: e1 < 0| yes Evaluation Count:87 | no Evaluation Count:0 |
| 0-87 |
| 1779 | e1 = -e1; executed (the execution status of this line is deduced): e1 = -e1; | - |
| 1780 | if ((i = e1 & 15) != 0) evaluated: (i = e1 & 15) != 0| yes Evaluation Count:24 | yes Evaluation Count:63 |
| 24-63 |
| 1781 | rv /= tens[i]; executed: rv /= tens[i];Execution Count:24 | 24 |
| 1782 | if (e1 &= ~15) { evaluated: e1 &= ~15| yes Evaluation Count:68 | yes Evaluation Count:19 |
| 19-68 |
| 1783 | e1 >>= 4; executed (the execution status of this line is deduced): e1 >>= 4; | - |
| 1784 | if (e1 >= 1 << n_bigtens) evaluated: e1 >= 1 << 5| yes Evaluation Count:2 | yes Evaluation Count:66 |
| 2-66 |
| 1785 | goto undfl; executed: goto undfl;Execution Count:2 | 2 |
| 1786 | for(j = 0; e1 > 1; j++, e1 >>= 1) evaluated: e1 > 1| yes Evaluation Count:8 | yes Evaluation Count:66 |
| 8-66 |
| 1787 | if (e1 & 1) evaluated: e1 & 1| yes Evaluation Count:4 | yes Evaluation Count:4 |
| 4 |
| 1788 | rv *= tinytens[j]; executed: rv *= tinytens[j];Execution Count:4 | 4 |
| 1789 | /* The last multiplication could underflow. */ | - |
| 1790 | rv0 = rv; executed (the execution status of this line is deduced): rv0 = rv; | - |
| 1791 | rv *= tinytens[j]; executed (the execution status of this line is deduced): rv *= tinytens[j]; | - |
| 1792 | if (rv == g_double_zero) partially evaluated: rv == g_double_zero| no Evaluation Count:0 | yes Evaluation Count:66 |
| 0-66 |
| 1793 | { | - |
| 1794 | rv = 2.*rv0; never executed (the execution status of this line is deduced): rv = 2.*rv0; | - |
| 1795 | rv *= tinytens[j]; never executed (the execution status of this line is deduced): rv *= tinytens[j]; | - |
| 1796 | if (rv == g_double_zero) never evaluated: rv == g_double_zero | 0 |
| 1797 | { | - |
| 1798 | undfl: | - |
| 1799 | rv = 0.; executed (the execution status of this line is deduced): rv = 0.; | - |
| 1800 | // errno = ERANGE; | - |
| 1801 | if (ok != 0) partially evaluated: ok != 0| yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
| 1802 | *ok = false; executed: *ok = false;Execution Count:2 | 2 |
| 1803 | if (bd0) partially evaluated: bd0| no Evaluation Count:0 | yes Evaluation Count:2 |
| 0-2 |
| 1804 | goto retfree; never executed: goto retfree; | 0 |
| 1805 | goto ret; executed: goto ret;Execution Count:2 | 2 |
| 1806 | } | - |
| 1807 | setWord0(&rv, Tiny0); never executed (the execution status of this line is deduced): setWord0(&rv, 0); | - |
| 1808 | setWord1(&rv, Tiny1); never executed (the execution status of this line is deduced): setWord1(&rv, 1); | - |
| 1809 | /* The refinement below will clean | - |
| 1810 | * this approximation up. | - |
| 1811 | */ | - |
| 1812 | } | 0 |
| 1813 | } executed: }Execution Count:66 | 66 |
| 1814 | } executed: }Execution Count:85 | 85 |
| 1815 | | - |
| 1816 | /* Now the hard part -- adjusting rv to the correct value.*/ | - |
| 1817 | | - |
| 1818 | /* Put digits into bd: true value = bd * 10^e */ | - |
| 1819 | | - |
| 1820 | bd0 = s2b(s0, nd0, nd, y); executed (the execution status of this line is deduced): bd0 = s2b(s0, nd0, nd, y); | - |
| 1821 | | - |
| 1822 | for(;;) { executed (the execution status of this line is deduced): for(;;) { | - |
| 1823 | bd = Balloc(bd0->k); executed (the execution status of this line is deduced): bd = Balloc(bd0->k); | - |
| 1824 | Bcopy(bd, bd0); executed (the execution status of this line is deduced): memcpy(reinterpret_cast<char *>(&bd->sign), reinterpret_cast<char *>(&bd0->sign), bd0->wds*sizeof(qint32) + 2*sizeof(int)); | - |
| 1825 | bb = d2b(rv, &bbe, &bbbits); /* rv = bb * 2^bbe */ executed (the execution status of this line is deduced): bb = d2b(rv, &bbe, &bbbits); | - |
| 1826 | bs = i2b(1); executed (the execution status of this line is deduced): bs = i2b(1); | - |
| 1827 | | - |
| 1828 | if (e >= 0) { evaluated: e >= 0| yes Evaluation Count:76 | yes Evaluation Count:87 |
| 76-87 |
| 1829 | bb2 = bb5 = 0; executed (the execution status of this line is deduced): bb2 = bb5 = 0; | - |
| 1830 | bd2 = bd5 = e; executed (the execution status of this line is deduced): bd2 = bd5 = e; | - |
| 1831 | } executed: }Execution Count:76 | 76 |
| 1832 | else { | - |
| 1833 | bb2 = bb5 = -e; executed (the execution status of this line is deduced): bb2 = bb5 = -e; | - |
| 1834 | bd2 = bd5 = 0; executed (the execution status of this line is deduced): bd2 = bd5 = 0; | - |
| 1835 | } executed: }Execution Count:87 | 87 |
| 1836 | if (bbe >= 0) evaluated: bbe >= 0| yes Evaluation Count:78 | yes Evaluation Count:85 |
| 78-85 |
| 1837 | bb2 += bbe; executed: bb2 += bbe;Execution Count:78 | 78 |
| 1838 | else | - |
| 1839 | bd2 -= bbe; executed: bd2 -= bbe;Execution Count:85 | 85 |
| 1840 | bs2 = bb2; executed (the execution status of this line is deduced): bs2 = bb2; | - |
| 1841 | #ifdef Sudden_Underflow | - |
| 1842 | #ifdef IBM | - |
| 1843 | j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3); | - |
| 1844 | #else | - |
| 1845 | j = P + 1 - bbbits; | - |
| 1846 | #endif | - |
| 1847 | #else | - |
| 1848 | i = bbe + bbbits - 1; /* logb(rv) */ executed (the execution status of this line is deduced): i = bbe + bbbits - 1; | - |
| 1849 | if (i < Emin) /* denormal */ evaluated: i < (-1022)| yes Evaluation Count:2 | yes Evaluation Count:161 |
| 2-161 |
| 1850 | j = bbe + (P-Emin); executed: j = bbe + (53 -(-1022));Execution Count:2 | 2 |
| 1851 | else | - |
| 1852 | j = P + 1 - bbbits; executed: j = 53 + 1 - bbbits;Execution Count:161 | 161 |
| 1853 | #endif | - |
| 1854 | bb2 += j; executed (the execution status of this line is deduced): bb2 += j; | - |
| 1855 | bd2 += j; executed (the execution status of this line is deduced): bd2 += j; | - |
| 1856 | i = bb2 < bd2 ? bb2 : bd2; evaluated: bb2 < bd2| yes Evaluation Count:83 | yes Evaluation Count:80 |
| 80-83 |
| 1857 | if (i > bs2) evaluated: i > bs2| yes Evaluation Count:87 | yes Evaluation Count:76 |
| 76-87 |
| 1858 | i = bs2; executed: i = bs2;Execution Count:87 | 87 |
| 1859 | if (i > 0) { partially evaluated: i > 0| yes Evaluation Count:163 | no Evaluation Count:0 |
| 0-163 |
| 1860 | bb2 -= i; executed (the execution status of this line is deduced): bb2 -= i; | - |
| 1861 | bd2 -= i; executed (the execution status of this line is deduced): bd2 -= i; | - |
| 1862 | bs2 -= i; executed (the execution status of this line is deduced): bs2 -= i; | - |
| 1863 | } executed: }Execution Count:163 | 163 |
| 1864 | if (bb5 > 0) { evaluated: bb5 > 0| yes Evaluation Count:87 | yes Evaluation Count:76 |
| 76-87 |
| 1865 | bs = pow5mult(bs, bb5); executed (the execution status of this line is deduced): bs = pow5mult(bs, bb5); | - |
| 1866 | bb1 = mult(bs, bb); executed (the execution status of this line is deduced): bb1 = mult(bs, bb); | - |
| 1867 | Bfree(bb); executed (the execution status of this line is deduced): Bfree(bb); | - |
| 1868 | bb = bb1; executed (the execution status of this line is deduced): bb = bb1; | - |
| 1869 | } executed: }Execution Count:87 | 87 |
| 1870 | if (bb2 > 0) partially evaluated: bb2 > 0| yes Evaluation Count:163 | no Evaluation Count:0 |
| 0-163 |
| 1871 | bb = lshift(bb, bb2); executed: bb = lshift(bb, bb2);Execution Count:163 | 163 |
| 1872 | if (bd5 > 0) evaluated: bd5 > 0| yes Evaluation Count:16 | yes Evaluation Count:147 |
| 16-147 |
| 1873 | bd = pow5mult(bd, bd5); executed: bd = pow5mult(bd, bd5);Execution Count:16 | 16 |
| 1874 | if (bd2 > 0) evaluated: bd2 > 0| yes Evaluation Count:87 | yes Evaluation Count:76 |
| 76-87 |
| 1875 | bd = lshift(bd, bd2); executed: bd = lshift(bd, bd2);Execution Count:87 | 87 |
| 1876 | if (bs2 > 0) evaluated: bs2 > 0| yes Evaluation Count:76 | yes Evaluation Count:87 |
| 76-87 |
| 1877 | bs = lshift(bs, bs2); executed: bs = lshift(bs, bs2);Execution Count:76 | 76 |
| 1878 | delta = diff(bb, bd); executed (the execution status of this line is deduced): delta = diff(bb, bd); | - |
| 1879 | dsign = delta->sign; executed (the execution status of this line is deduced): dsign = delta->sign; | - |
| 1880 | delta->sign = 0; executed (the execution status of this line is deduced): delta->sign = 0; | - |
| 1881 | i = cmp(delta, bs); executed (the execution status of this line is deduced): i = cmp(delta, bs); | - |
| 1882 | if (i < 0) { evaluated: i < 0| yes Evaluation Count:30 | yes Evaluation Count:133 |
| 30-133 |
| 1883 | /* Error is less than half an ulp -- check for | - |
| 1884 | * special case of mantissa a power of two. | - |
| 1885 | */ | - |
| 1886 | if (dsign || getWord1(rv) || getWord0(rv) & Bndry_mask) evaluated: dsign| yes Evaluation Count:10 | yes Evaluation Count:20 |
evaluated: getWord1(rv)| yes Evaluation Count:17 | yes Evaluation Count:3 |
partially evaluated: getWord0(rv) & 0xfffff| no Evaluation Count:0 | yes Evaluation Count:3 |
| 0-20 |
| 1887 | break; executed: break;Execution Count:27 | 27 |
| 1888 | delta = lshift(delta,Log2P); executed (the execution status of this line is deduced): delta = lshift(delta,1); | - |
| 1889 | if (cmp(delta, bs) > 0) evaluated: cmp(delta, bs) > 0| yes Evaluation Count:1 | yes Evaluation Count:2 |
| 1-2 |
| 1890 | goto drop_down; executed: goto drop_down;Execution Count:1 | 1 |
| 1891 | break; executed: break;Execution Count:2 | 2 |
| 1892 | } | - |
| 1893 | if (i == 0) { partially evaluated: i == 0| no Evaluation Count:0 | yes Evaluation Count:133 |
| 0-133 |
| 1894 | /* exactly half-way between */ | - |
| 1895 | if (dsign) { | 0 |
| 1896 | if ((getWord0(rv) & Bndry_mask1) == Bndry_mask1 never evaluated: (getWord0(rv) & 0xfffff) == 0xfffff | 0 |
| 1897 | && getWord1(rv) == 0xffffffff) { never evaluated: getWord1(rv) == 0xffffffff | 0 |
| 1898 | /*boundary case -- increment exponent*/ | - |
| 1899 | setWord0(&rv, (getWord0(rv) & Exp_mask) never executed (the execution status of this line is deduced): setWord0(&rv, (getWord0(rv) & 0x7ff00000) | - |
| 1900 | + Exp_msk1 never executed (the execution status of this line is deduced): + 0x100000 | - |
| 1901 | #ifdef IBM never executed (the execution status of this line is deduced): | - |
| 1902 | | Exp_msk1 >> 4 never executed (the execution status of this line is deduced): | - |
| 1903 | #endif never executed (the execution status of this line is deduced): | - |
| 1904 | ); never executed (the execution status of this line is deduced): ); | - |
| 1905 | setWord1(&rv, 0); never executed (the execution status of this line is deduced): setWord1(&rv, 0); | - |
| 1906 | break; | 0 |
| 1907 | } | - |
| 1908 | } | 0 |
| 1909 | else if (!(getWord0(rv) & Bndry_mask) && !getWord1(rv)) { never evaluated: !(getWord0(rv) & 0xfffff) never evaluated: !getWord1(rv) | 0 |
| 1910 | drop_down: | - |
| 1911 | /* boundary case -- decrement exponent */ | - |
| 1912 | #ifdef Sudden_Underflow | - |
| 1913 | L = getWord0(rv) & Exp_mask; | - |
| 1914 | #ifdef IBM | - |
| 1915 | if (L < Exp_msk1) | - |
| 1916 | #else | - |
| 1917 | if (L <= Exp_msk1) | - |
| 1918 | #endif | - |
| 1919 | goto undfl; | - |
| 1920 | L -= Exp_msk1; | - |
| 1921 | #else | - |
| 1922 | L = (getWord0(rv) & Exp_mask) - Exp_msk1; executed (the execution status of this line is deduced): L = (getWord0(rv) & 0x7ff00000) - 0x100000; | - |
| 1923 | #endif | - |
| 1924 | setWord0(&rv, L | Bndry_mask1); executed (the execution status of this line is deduced): setWord0(&rv, L | 0xfffff); | - |
| 1925 | setWord1(&rv, 0xffffffff); executed (the execution status of this line is deduced): setWord1(&rv, 0xffffffff); | - |
| 1926 | #ifdef IBM | - |
| 1927 | goto cont; | - |
| 1928 | #else | - |
| 1929 | break; executed: break;Execution Count:1 | 1 |
| 1930 | #endif | - |
| 1931 | } | - |
| 1932 | #ifndef ROUND_BIASED | - |
| 1933 | if (!(getWord1(rv) & LSB)) never evaluated: !(getWord1(rv) & 1) | 0 |
| 1934 | break; | 0 |
| 1935 | #endif | - |
| 1936 | if (dsign) | 0 |
| 1937 | rv += ulp(rv); never executed: rv += ulp(rv); | 0 |
| 1938 | #ifndef ROUND_BIASED | - |
| 1939 | else { | - |
| 1940 | rv -= ulp(rv); never executed (the execution status of this line is deduced): rv -= ulp(rv); | - |
| 1941 | #ifndef Sudden_Underflow | - |
| 1942 | if (rv == g_double_zero) never evaluated: rv == g_double_zero | 0 |
| 1943 | goto undfl; never executed: goto undfl; | 0 |
| 1944 | #endif | - |
| 1945 | } | 0 |
| 1946 | #endif | - |
| 1947 | break; | 0 |
| 1948 | } | - |
| 1949 | if ((aadj = ratio(delta, bs)) <= 2.) { evaluated: (aadj = ratio(delta, bs)) <= 2.| yes Evaluation Count:15 | yes Evaluation Count:118 |
| 15-118 |
| 1950 | if (dsign) evaluated: dsign| yes Evaluation Count:11 | yes Evaluation Count:4 |
| 4-11 |
| 1951 | aadj = aadj1 = 1.; executed: aadj = aadj1 = 1.;Execution Count:11 | 11 |
| 1952 | else if (getWord1(rv) || getWord0(rv) & Bndry_mask) { partially evaluated: getWord1(rv)| yes Evaluation Count:4 | no Evaluation Count:0 |
never evaluated: getWord0(rv) & 0xfffff | 0-4 |
| 1953 | #ifndef Sudden_Underflow | - |
| 1954 | if (getWord1(rv) == Tiny1 && !getWord0(rv)) partially evaluated: getWord1(rv) == 1| no Evaluation Count:0 | yes Evaluation Count:4 |
never evaluated: !getWord0(rv) | 0-4 |
| 1955 | goto undfl; never executed: goto undfl; | 0 |
| 1956 | #endif | - |
| 1957 | aadj = 1.; executed (the execution status of this line is deduced): aadj = 1.; | - |
| 1958 | aadj1 = -1.; executed (the execution status of this line is deduced): aadj1 = -1.; | - |
| 1959 | } executed: }Execution Count:4 | 4 |
| 1960 | else { | - |
| 1961 | /* special case -- power of FLT_RADIX to be */ | - |
| 1962 | /* rounded down... */ | - |
| 1963 | | - |
| 1964 | if (aadj < 2./FLT_RADIX) never evaluated: aadj < 2./2 | 0 |
| 1965 | aadj = 1./FLT_RADIX; never executed: aadj = 1./2; | 0 |
| 1966 | else | - |
| 1967 | aadj *= 0.5; never executed: aadj *= 0.5; | 0 |
| 1968 | aadj1 = -aadj; never executed (the execution status of this line is deduced): aadj1 = -aadj; | - |
| 1969 | } | 0 |
| 1970 | } | - |
| 1971 | else { | - |
| 1972 | aadj *= 0.5; executed (the execution status of this line is deduced): aadj *= 0.5; | - |
| 1973 | aadj1 = dsign ? aadj : -aadj; partially evaluated: dsign| yes Evaluation Count:118 | no Evaluation Count:0 |
| 0-118 |
| 1974 | #ifdef Check_FLT_ROUNDS | - |
| 1975 | switch(FLT_ROUNDS) { | - |
| 1976 | case 2: /* towards +infinity */ | - |
| 1977 | aadj1 -= 0.5; | - |
| 1978 | break; | - |
| 1979 | case 0: /* towards 0 */ | - |
| 1980 | case 3: /* towards -infinity */ | - |
| 1981 | aadj1 += 0.5; | - |
| 1982 | } | - |
| 1983 | #else | - |
| 1984 | if (FLT_ROUNDS == 0) partially evaluated: 1 == 0| no Evaluation Count:0 | yes Evaluation Count:118 |
| 0-118 |
| 1985 | aadj1 += 0.5; never executed: aadj1 += 0.5; | 0 |
| 1986 | #endif | - |
| 1987 | } executed: }Execution Count:118 | 118 |
| 1988 | y = getWord0(rv) & Exp_mask; executed (the execution status of this line is deduced): y = getWord0(rv) & 0x7ff00000; | - |
| 1989 | | - |
| 1990 | /* Check for overflow */ | - |
| 1991 | | - |
| 1992 | if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { evaluated: y == 0x100000*(1024 +1023 -1)| yes Evaluation Count:62 | yes Evaluation Count:71 |
| 62-71 |
| 1993 | rv0 = rv; executed (the execution status of this line is deduced): rv0 = rv; | - |
| 1994 | setWord0(&rv, getWord0(rv) - P*Exp_msk1); executed (the execution status of this line is deduced): setWord0(&rv, getWord0(rv) - 53*0x100000); | - |
| 1995 | adj = aadj1 * ulp(rv); executed (the execution status of this line is deduced): adj = aadj1 * ulp(rv); | - |
| 1996 | rv += adj; executed (the execution status of this line is deduced): rv += adj; | - |
| 1997 | if ((getWord0(rv) & Exp_mask) >= partially evaluated: (getWord0(rv) & 0x7ff00000) >= 0x100000*(1024 +1023 -53)| no Evaluation Count:0 | yes Evaluation Count:62 |
| 0-62 |
| 1998 | Exp_msk1*(DBL_MAX_EXP+Bias-P)) { partially evaluated: (getWord0(rv) & 0x7ff00000) >= 0x100000*(1024 +1023 -53)| no Evaluation Count:0 | yes Evaluation Count:62 |
| 0-62 |
| 1999 | if (getWord0(rv0) == Big0 && getWord1(rv0) == Big1) never evaluated: getWord0(rv0) == (0xfffff | 0x100000*(1024 +1023 -1)) never evaluated: getWord1(rv0) == 0xffffffff | 0 |
| 2000 | goto ovfl; never executed: goto ovfl; | 0 |
| 2001 | setWord0(&rv, Big0); never executed (the execution status of this line is deduced): setWord0(&rv, (0xfffff | 0x100000*(1024 +1023 -1))); | - |
| 2002 | setWord1(&rv, Big1); never executed (the execution status of this line is deduced): setWord1(&rv, 0xffffffff); | - |
| 2003 | goto cont; never executed: goto cont; | 0 |
| 2004 | } | - |
| 2005 | else | - |
| 2006 | setWord0(&rv, getWord0(rv) + P*Exp_msk1); executed: setWord0(&rv, getWord0(rv) + 53*0x100000);Execution Count:62 | 62 |
| 2007 | } | - |
| 2008 | else { | - |
| 2009 | #ifdef Sudden_Underflow | - |
| 2010 | if ((getWord0(rv) & Exp_mask) <= P*Exp_msk1) { | - |
| 2011 | rv0 = rv; | - |
| 2012 | setWord0(&rv, getWord0(rv) + P*Exp_msk1); | - |
| 2013 | adj = aadj1 * ulp(rv); | - |
| 2014 | rv += adj; | - |
| 2015 | #ifdef IBM | - |
| 2016 | if ((getWord0(rv) & Exp_mask) < P*Exp_msk1) | - |
| 2017 | #else | - |
| 2018 | if ((getWord0(rv) & Exp_mask) <= P*Exp_msk1) | - |
| 2019 | #endif | - |
| 2020 | { | - |
| 2021 | if (getWord0(rv0) == Tiny0 | - |
| 2022 | && getWord1(rv0) == Tiny1) | - |
| 2023 | goto undfl; | - |
| 2024 | setWord0(&rv, Tiny0); | - |
| 2025 | setWord1(&rv, Tiny1); | - |
| 2026 | goto cont; | - |
| 2027 | } | - |
| 2028 | else | - |
| 2029 | setWord0(&rv, getWord0(rv) - P*Exp_msk1); | - |
| 2030 | } | - |
| 2031 | else { | - |
| 2032 | adj = aadj1 * ulp(rv); | - |
| 2033 | rv += adj; | - |
| 2034 | } | - |
| 2035 | #else | - |
| 2036 | /* Compute adj so that the IEEE rounding rules will | - |
| 2037 | * correctly round rv + adj in some half-way cases. | - |
| 2038 | * If rv * ulp(rv) is denormalized (i.e., | - |
| 2039 | * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid | - |
| 2040 | * trouble from bits lost to denormalization; | - |
| 2041 | * example: 1.2e-307 . | - |
| 2042 | */ | - |
| 2043 | if (y <= (P-1)*Exp_msk1 && aadj >= 1.) { partially evaluated: y <= (53 -1)*0x100000| no Evaluation Count:0 | yes Evaluation Count:71 |
never evaluated: aadj >= 1. | 0-71 |
| 2044 | aadj1 = int(aadj + 0.5); never executed (the execution status of this line is deduced): aadj1 = int(aadj + 0.5); | - |
| 2045 | if (!dsign) | 0 |
| 2046 | aadj1 = -aadj1; never executed: aadj1 = -aadj1; | 0 |
| 2047 | } | 0 |
| 2048 | adj = aadj1 * ulp(rv); executed (the execution status of this line is deduced): adj = aadj1 * ulp(rv); | - |
| 2049 | rv += adj; executed (the execution status of this line is deduced): rv += adj; | - |
| 2050 | #endif | - |
| 2051 | } executed: }Execution Count:71 | 71 |
| 2052 | z = getWord0(rv) & Exp_mask; executed (the execution status of this line is deduced): z = getWord0(rv) & 0x7ff00000; | - |
| 2053 | if (y == z) { evaluated: y == z| yes Evaluation Count:131 | yes Evaluation Count:2 |
| 2-131 |
| 2054 | /* Can we stop now? */ | - |
| 2055 | L = Long(aadj); never executed (the execution status of this line is deduced): L = qint32(aadj); | - |
| 2056 | aadj -= L; never executed (the execution status of this line is deduced): aadj -= L; | - |
| 2057 | /* The tolerances below are conservative. */ | - |
| 2058 | if (dsign || getWord1(rv) || getWord0(rv) & Bndry_mask) { evaluated: dsign| yes Evaluation Count:127 | yes Evaluation Count:4 |
partially evaluated: getWord1(rv)| yes Evaluation Count:4 | no Evaluation Count:0 |
never evaluated: getWord0(rv) & 0xfffff | 0-127 |
| 2059 | if (aadj < .4999999 || aadj > .5000001) evaluated: aadj < .4999999| yes Evaluation Count:119 | yes Evaluation Count:12 |
partially evaluated: aadj > .5000001| yes Evaluation Count:12 | no Evaluation Count:0 |
| 0-119 |
| 2060 | break; executed: break;Execution Count:131 | 131 |
| 2061 | } | 0 |
| 2062 | else if (aadj < .4999999/FLT_RADIX) never evaluated: aadj < .4999999/2 | 0 |
| 2063 | break; | 0 |
| 2064 | } | - |
| 2065 | cont: code before this statement executed: cont:Execution Count:2 | 2 |
| 2066 | Bfree(bb); executed (the execution status of this line is deduced): Bfree(bb); | - |
| 2067 | Bfree(bd); executed (the execution status of this line is deduced): Bfree(bd); | - |
| 2068 | Bfree(bs); executed (the execution status of this line is deduced): Bfree(bs); | - |
| 2069 | Bfree(delta); executed (the execution status of this line is deduced): Bfree(delta); | - |
| 2070 | } executed: }Execution Count:2 | 2 |
| 2071 | retfree: code before this statement executed: retfree:Execution Count:161 | 161 |
| 2072 | Bfree(bb); executed (the execution status of this line is deduced): Bfree(bb); | - |
| 2073 | Bfree(bd); executed (the execution status of this line is deduced): Bfree(bd); | - |
| 2074 | Bfree(bs); executed (the execution status of this line is deduced): Bfree(bs); | - |
| 2075 | Bfree(bd0); executed (the execution status of this line is deduced): Bfree(bd0); | - |
| 2076 | Bfree(delta); executed (the execution status of this line is deduced): Bfree(delta); | - |
| 2077 | ret: code before this statement executed: ret:Execution Count:161 | 161 |
| 2078 | if (se) partially evaluated: se| yes Evaluation Count:4149 | no Evaluation Count:0 |
| 0-4149 |
| 2079 | *se = s; executed: *se = s;Execution Count:4149 | 4149 |
| 2080 | return sign ? -rv : rv; executed: return sign ? -rv : rv;Execution Count:4149 | 4149 |
| 2081 | } | - |
| 2082 | | - |
| 2083 | static int quorem(Bigint *b, Bigint *S) | - |
| 2084 | { | - |
| 2085 | int n; executed (the execution status of this line is deduced): int n; | - |
| 2086 | Long borrow, y; executed (the execution status of this line is deduced): qint32 borrow, y; | - |
| 2087 | ULong carry, q, ys; executed (the execution status of this line is deduced): quint32 carry, q, ys; | - |
| 2088 | ULong *bx, *bxe, *sx, *sxe; executed (the execution status of this line is deduced): quint32 *bx, *bxe, *sx, *sxe; | - |
| 2089 | #ifdef Pack_32 | - |
| 2090 | Long z; executed (the execution status of this line is deduced): qint32 z; | - |
| 2091 | ULong si, zs; executed (the execution status of this line is deduced): quint32 si, zs; | - |
| 2092 | #endif | - |
| 2093 | | - |
| 2094 | n = S->wds; executed (the execution status of this line is deduced): n = S->wds; | - |
| 2095 | #ifdef BSD_QDTOA_DEBUG | - |
| 2096 | /*debug*/ if (b->wds > n) | - |
| 2097 | /*debug*/ Bug("oversize b in quorem"); | - |
| 2098 | #endif | - |
| 2099 | if (b->wds < n) evaluated: b->wds < n| yes Evaluation Count:3865 | yes Evaluation Count:120577 |
| 3865-120577 |
| 2100 | return 0; executed: return 0;Execution Count:3865 | 3865 |
| 2101 | sx = S->x; executed (the execution status of this line is deduced): sx = S->x; | - |
| 2102 | sxe = sx + --n; executed (the execution status of this line is deduced): sxe = sx + --n; | - |
| 2103 | bx = b->x; executed (the execution status of this line is deduced): bx = b->x; | - |
| 2104 | bxe = bx + n; executed (the execution status of this line is deduced): bxe = bx + n; | - |
| 2105 | q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ executed (the execution status of this line is deduced): q = *bxe / (*sxe + 1); | - |
| 2106 | #ifdef BSD_QDTOA_DEBUG | - |
| 2107 | /*debug*/ if (q > 9) | - |
| 2108 | /*debug*/ Bug("oversized quotient in quorem"); | - |
| 2109 | #endif | - |
| 2110 | if (q) { evaluated: q| yes Evaluation Count:110845 | yes Evaluation Count:9732 |
| 9732-110845 |
| 2111 | borrow = 0; executed (the execution status of this line is deduced): borrow = 0; | - |
| 2112 | carry = 0; executed (the execution status of this line is deduced): carry = 0; | - |
| 2113 | do { | - |
| 2114 | #ifdef Pack_32 | - |
| 2115 | si = *sx++; executed (the execution status of this line is deduced): si = *sx++; | - |
| 2116 | ys = (si & 0xffff) * q + carry; executed (the execution status of this line is deduced): ys = (si & 0xffff) * q + carry; | - |
| 2117 | zs = (si >> 16) * q + (ys >> 16); executed (the execution status of this line is deduced): zs = (si >> 16) * q + (ys >> 16); | - |
| 2118 | carry = zs >> 16; executed (the execution status of this line is deduced): carry = zs >> 16; | - |
| 2119 | y = (*bx & 0xffff) - (ys & 0xffff) + borrow; executed (the execution status of this line is deduced): y = (*bx & 0xffff) - (ys & 0xffff) + borrow; | - |
| 2120 | borrow = y >> 16; executed (the execution status of this line is deduced): borrow = y >> 16; | - |
| 2121 | Sign_Extend(borrow, y); | - |
| 2122 | z = (*bx >> 16) - (zs & 0xffff) + borrow; executed (the execution status of this line is deduced): z = (*bx >> 16) - (zs & 0xffff) + borrow; | - |
| 2123 | borrow = z >> 16; executed (the execution status of this line is deduced): borrow = z >> 16; | - |
| 2124 | Sign_Extend(borrow, z); | - |
| 2125 | Storeinc(bx, z, y); executed (the execution status of this line is deduced): Storeinc(bx, z, y); | - |
| 2126 | #else | - |
| 2127 | ys = *sx++ * q + carry; | - |
| 2128 | carry = ys >> 16; | - |
| 2129 | y = *bx - (ys & 0xffff) + borrow; | - |
| 2130 | borrow = y >> 16; | - |
| 2131 | Sign_Extend(borrow, y); | - |
| 2132 | *bx++ = y & 0xffff; | - |
| 2133 | #endif | - |
| 2134 | } executed: }Execution Count:899957 | 899957 |
| 2135 | while(sx <= sxe); evaluated: sx <= sxe| yes Evaluation Count:789112 | yes Evaluation Count:110845 |
| 110845-789112 |
| 2136 | if (!*bxe) { partially evaluated: !*bxe| no Evaluation Count:0 | yes Evaluation Count:110845 |
| 0-110845 |
| 2137 | bx = b->x; never executed (the execution status of this line is deduced): bx = b->x; | - |
| 2138 | while(--bxe > bx && !*bxe) never evaluated: --bxe > bx never evaluated: !*bxe | 0 |
| 2139 | --n; | 0 |
| 2140 | b->wds = n; never executed (the execution status of this line is deduced): b->wds = n; | - |
| 2141 | } | 0 |
| 2142 | } executed: }Execution Count:110845 | 110845 |
| 2143 | if (cmp(b, S) >= 0) { evaluated: cmp(b, S) >= 0| yes Evaluation Count:582 | yes Evaluation Count:119995 |
| 582-119995 |
| 2144 | q++; executed (the execution status of this line is deduced): q++; | - |
| 2145 | borrow = 0; executed (the execution status of this line is deduced): borrow = 0; | - |
| 2146 | carry = 0; executed (the execution status of this line is deduced): carry = 0; | - |
| 2147 | bx = b->x; executed (the execution status of this line is deduced): bx = b->x; | - |
| 2148 | sx = S->x; executed (the execution status of this line is deduced): sx = S->x; | - |
| 2149 | do { | - |
| 2150 | #ifdef Pack_32 | - |
| 2151 | si = *sx++; executed (the execution status of this line is deduced): si = *sx++; | - |
| 2152 | ys = (si & 0xffff) + carry; executed (the execution status of this line is deduced): ys = (si & 0xffff) + carry; | - |
| 2153 | zs = (si >> 16) + (ys >> 16); executed (the execution status of this line is deduced): zs = (si >> 16) + (ys >> 16); | - |
| 2154 | carry = zs >> 16; executed (the execution status of this line is deduced): carry = zs >> 16; | - |
| 2155 | y = (*bx & 0xffff) - (ys & 0xffff) + borrow; executed (the execution status of this line is deduced): y = (*bx & 0xffff) - (ys & 0xffff) + borrow; | - |
| 2156 | borrow = y >> 16; executed (the execution status of this line is deduced): borrow = y >> 16; | - |
| 2157 | Sign_Extend(borrow, y); | - |
| 2158 | z = (*bx >> 16) - (zs & 0xffff) + borrow; executed (the execution status of this line is deduced): z = (*bx >> 16) - (zs & 0xffff) + borrow; | - |
| 2159 | borrow = z >> 16; executed (the execution status of this line is deduced): borrow = z >> 16; | - |
| 2160 | Sign_Extend(borrow, z); | - |
| 2161 | Storeinc(bx, z, y); executed (the execution status of this line is deduced): Storeinc(bx, z, y); | - |
| 2162 | #else | - |
| 2163 | ys = *sx++ + carry; | - |
| 2164 | carry = ys >> 16; | - |
| 2165 | y = *bx - (ys & 0xffff) + borrow; | - |
| 2166 | borrow = y >> 16; | - |
| 2167 | Sign_Extend(borrow, y); | - |
| 2168 | *bx++ = y & 0xffff; | - |
| 2169 | #endif | - |
| 2170 | } executed: }Execution Count:2767 | 2767 |
| 2171 | while(sx <= sxe); evaluated: sx <= sxe| yes Evaluation Count:2185 | yes Evaluation Count:582 |
| 582-2185 |
| 2172 | bx = b->x; executed (the execution status of this line is deduced): bx = b->x; | - |
| 2173 | bxe = bx + n; executed (the execution status of this line is deduced): bxe = bx + n; | - |
| 2174 | if (!*bxe) { partially evaluated: !*bxe| yes Evaluation Count:582 | no Evaluation Count:0 |
| 0-582 |
| 2175 | while(--bxe > bx && !*bxe) evaluated: --bxe > bx| yes Evaluation Count:1603 | yes Evaluation Count:582 |
partially evaluated: !*bxe| yes Evaluation Count:1603 | no Evaluation Count:0 |
| 0-1603 |
| 2176 | --n; executed: --n;Execution Count:1603 | 1603 |
| 2177 | b->wds = n; executed (the execution status of this line is deduced): b->wds = n; | - |
| 2178 | } executed: }Execution Count:582 | 582 |
| 2179 | } executed: }Execution Count:582 | 582 |
| 2180 | return q; executed: return q;Execution Count:120577 | 120577 |
| 2181 | } | - |
| 2182 | | - |
| 2183 | /* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. | - |
| 2184 | * | - |
| 2185 | * Inspired by "How to Print Floating-Point Numbers Accurately" by | - |
| 2186 | * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101]. | - |
| 2187 | * | - |
| 2188 | * Modifications: | - |
| 2189 | * 1. Rather than iterating, we use a simple numeric overestimate | - |
| 2190 | * to determine k = floor(log10(d)). We scale relevant | - |
| 2191 | * quantities using O(log2(k)) rather than O(k) multiplications. | - |
| 2192 | * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't | - |
| 2193 | * try to generate digits strictly left to right. Instead, we | - |
| 2194 | * compute with fewer bits and propagate the carry if necessary | - |
| 2195 | * when rounding the final digit up. This is often faster. | - |
| 2196 | * 3. Under the assumption that input will be rounded nearest, | - |
| 2197 | * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. | - |
| 2198 | * That is, we allow equality in stopping tests when the | - |
| 2199 | * round-nearest rule will give the same floating-point value | - |
| 2200 | * as would satisfaction of the stopping test with strict | - |
| 2201 | * inequality. | - |
| 2202 | * 4. We remove common factors of powers of 2 from relevant | - |
| 2203 | * quantities. | - |
| 2204 | * 5. When converting floating-point integers less than 1e16, | - |
| 2205 | * we use floating-point arithmetic rather than resorting | - |
| 2206 | * to multiple-precision integers. | - |
| 2207 | * 6. When asked to produce fewer than 15 digits, we first try | - |
| 2208 | * to get by with floating-point arithmetic; we resort to | - |
| 2209 | * multiple-precision integer arithmetic only if we cannot | - |
| 2210 | * guarantee that the floating-point calculation has given | - |
| 2211 | * the correctly rounded result. For k requested digits and | - |
| 2212 | * "uniformly" distributed input, the probability is | - |
| 2213 | * something like 10^(k-15) that we must resort to the Long | - |
| 2214 | * calculation. | - |
| 2215 | */ | - |
| 2216 | | - |
| 2217 | #if defined(Q_OS_WIN) && defined (Q_CC_GNU) && !defined(_clear87) // See QTBUG-7576 | - |
| 2218 | extern "C" { | - |
| 2219 | __attribute__ ((dllimport)) unsigned int __cdecl __MINGW_NOTHROW _control87 (unsigned int unNew, unsigned int unMask); | - |
| 2220 | __attribute__ ((dllimport)) unsigned int __cdecl __MINGW_NOTHROW _clearfp (void); /* Clear the FPU status word */ | - |
| 2221 | } | - |
| 2222 | # define _clear87 _clearfp | - |
| 2223 | #endif | - |
| 2224 | | - |
| 2225 | /* This actually sometimes returns a pointer to a string literal | - |
| 2226 | cast to a char*. Do NOT try to modify the return value. */ | - |
| 2227 | | - |
| 2228 | Q_CORE_EXPORT char *qdtoa ( double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp) | - |
| 2229 | { | - |
| 2230 | // Some values of the floating-point control word can cause _qdtoa to crash with an underflow. | - |
| 2231 | // We set a safe value here. | - |
| 2232 | #ifdef Q_OS_WIN | - |
| 2233 | _clear87(); | - |
| 2234 | unsigned int oldbits = _control87(0, 0); | - |
| 2235 | #ifndef MCW_EM | - |
| 2236 | # ifdef _MCW_EM | - |
| 2237 | # define MCW_EM _MCW_EM | - |
| 2238 | # else | - |
| 2239 | # define MCW_EM 0x0008001F | - |
| 2240 | # endif | - |
| 2241 | #endif | - |
| 2242 | _control87(MCW_EM, MCW_EM); | - |
| 2243 | #endif | - |
| 2244 | | - |
| 2245 | #if defined(Q_OS_LINUX) && !defined(__UCLIBC__) | - |
| 2246 | fenv_t envp; executed (the execution status of this line is deduced): fenv_t envp; | - |
| 2247 | feholdexcept(&envp); executed (the execution status of this line is deduced): feholdexcept(&envp); | - |
| 2248 | #endif | - |
| 2249 | | - |
| 2250 | char *s = _qdtoa(d, mode, ndigits, decpt, sign, rve, resultp); executed (the execution status of this line is deduced): char *s = _qdtoa(d, mode, ndigits, decpt, sign, rve, resultp); | - |
| 2251 | | - |
| 2252 | #ifdef Q_OS_WIN | - |
| 2253 | _clear87(); | - |
| 2254 | #ifndef _M_X64 | - |
| 2255 | _control87(oldbits, 0xFFFFF); | - |
| 2256 | #else | - |
| 2257 | # ifndef _MCW_EM // Potentially missing on MinGW | - |
| 2258 | # define _MCW_EM 0x0008001f | - |
| 2259 | # endif | - |
| 2260 | # ifndef _MCW_RC | - |
| 2261 | # define _MCW_RC 0x00000300 | - |
| 2262 | # endif | - |
| 2263 | # ifndef _MCW_DN | - |
| 2264 | # define _MCW_DN 0x03000000 | - |
| 2265 | # endif | - |
| 2266 | _control87(oldbits, _MCW_EM|_MCW_DN|_MCW_RC); | - |
| 2267 | #endif //_M_X64 | - |
| 2268 | #endif //Q_OS_WIN | - |
| 2269 | | - |
| 2270 | #if defined(Q_OS_LINUX) && !defined(__UCLIBC__) | - |
| 2271 | fesetenv(&envp); executed (the execution status of this line is deduced): fesetenv(&envp); | - |
| 2272 | #endif | - |
| 2273 | | - |
| 2274 | return s; executed: return s;Execution Count:1505278 | 1505278 |
| 2275 | } | - |
| 2276 | | - |
| 2277 | static char *_qdtoa( NEEDS_VOLATILE double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp) | - |
| 2278 | { | - |
| 2279 | /* | - |
| 2280 | Arguments ndigits, decpt, sign are similar to those | - |
| 2281 | of ecvt and fcvt; trailing zeros are suppressed from | - |
| 2282 | the returned string. If not null, *rve is set to point | - |
| 2283 | to the end of the return value. If d is +-Infinity or NaN, | - |
| 2284 | then *decpt is set to 9999. | - |
| 2285 | | - |
| 2286 | mode: | - |
| 2287 | 0 ==> shortest string that yields d when read in | - |
| 2288 | and rounded to nearest. | - |
| 2289 | 1 ==> like 0, but with Steele & White stopping rule; | - |
| 2290 | e.g. with IEEE P754 arithmetic , mode 0 gives | - |
| 2291 | 1e23 whereas mode 1 gives 9.999999999999999e22. | - |
| 2292 | 2 ==> max(1,ndigits) significant digits. This gives a | - |
| 2293 | return value similar to that of ecvt, except | - |
| 2294 | that trailing zeros are suppressed. | - |
| 2295 | 3 ==> through ndigits past the decimal point. This | - |
| 2296 | gives a return value similar to that from fcvt, | - |
| 2297 | except that trailing zeros are suppressed, and | - |
| 2298 | ndigits can be negative. | - |
| 2299 | 4-9 should give the same return values as 2-3, i.e., | - |
| 2300 | 4 <= mode <= 9 ==> same return as mode | - |
| 2301 | 2 + (mode & 1). These modes are mainly for | - |
| 2302 | debugging; often they run slower but sometimes | - |
| 2303 | faster than modes 2-3. | - |
| 2304 | 4,5,8,9 ==> left-to-right digit generation. | - |
| 2305 | 6-9 ==> don't try fast floating-point estimate | - |
| 2306 | (if applicable). | - |
| 2307 | | - |
| 2308 | Values of mode other than 0-9 are treated as mode 0. | - |
| 2309 | | - |
| 2310 | Sufficient space is allocated to the return value | - |
| 2311 | to hold the suppressed trailing zeros. | - |
| 2312 | */ | - |
| 2313 | | - |
| 2314 | int bbits, b2, b5, be, dig, i, ieps, ilim0, executed (the execution status of this line is deduced): int bbits, b2, b5, be, dig, i, ieps, ilim0, | - |
| 2315 | j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, executed (the execution status of this line is deduced): j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, | - |
| 2316 | try_quick; executed (the execution status of this line is deduced): try_quick; | - |
| 2317 | int ilim = 0, ilim1 = 0, spec_case = 0; /* pacify gcc */ executed (the execution status of this line is deduced): int ilim = 0, ilim1 = 0, spec_case = 0; | - |
| 2318 | Long L; executed (the execution status of this line is deduced): qint32 L; | - |
| 2319 | #ifndef Sudden_Underflow | - |
| 2320 | int denorm; executed (the execution status of this line is deduced): int denorm; | - |
| 2321 | ULong x; executed (the execution status of this line is deduced): quint32 x; | - |
| 2322 | #endif | - |
| 2323 | Bigint *b, *b1, *delta, *mhi, *S; executed (the execution status of this line is deduced): Bigint *b, *b1, *delta, *mhi, *S; | - |
| 2324 | Bigint *mlo = NULL; /* pacify gcc */ executed (the execution status of this line is deduced): Bigint *mlo = __null; | - |
| 2325 | double d2; executed (the execution status of this line is deduced): double d2; | - |
| 2326 | double ds, eps; executed (the execution status of this line is deduced): double ds, eps; | - |
| 2327 | char *s, *s0; executed (the execution status of this line is deduced): char *s, *s0; | - |
| 2328 | | - |
| 2329 | if (getWord0(d) & Sign_bit) { evaluated: getWord0(d) & 0x80000000| yes Evaluation Count:474215 | yes Evaluation Count:1031063 |
| 474215-1031063 |
| 2330 | /* set sign for everything, including 0's and NaNs */ | - |
| 2331 | *sign = 1; executed (the execution status of this line is deduced): *sign = 1; | - |
| 2332 | setWord0(&d, getWord0(d) & ~Sign_bit); /* clear sign bit */ executed (the execution status of this line is deduced): setWord0(&d, getWord0(d) & ~0x80000000); | - |
| 2333 | } executed: }Execution Count:474215 | 474215 |
| 2334 | else | - |
| 2335 | *sign = 0; executed: *sign = 0;Execution Count:1031063 | 1031063 |
| 2336 | | - |
| 2337 | #if defined(IEEE_Arith) + defined(VAX) | - |
| 2338 | #ifdef IEEE_Arith | - |
| 2339 | if ((getWord0(d) & Exp_mask) == Exp_mask) partially evaluated: (getWord0(d) & 0x7ff00000) == 0x7ff00000| no Evaluation Count:0 | yes Evaluation Count:1505278 |
| 0-1505278 |
| 2340 | #else | - |
| 2341 | if (getWord0(d) == 0x8000) | - |
| 2342 | #endif | - |
| 2343 | { | - |
| 2344 | /* Infinity or NaN */ | - |
| 2345 | *decpt = 9999; never executed (the execution status of this line is deduced): *decpt = 9999; | - |
| 2346 | s = never executed (the execution status of this line is deduced): s = | - |
| 2347 | #ifdef IEEE_Arith never executed (the execution status of this line is deduced): | - |
| 2348 | !getWord1(d) && !(getWord0(d) & 0xfffff) ? const_cast<char*>("Infinity") : never evaluated: !getWord1(d) never evaluated: !(getWord0(d) & 0xfffff) | 0 |
| 2349 | #endif never executed (the execution status of this line is deduced): | - |
| 2350 | const_cast<char*>("NaN"); never executed (the execution status of this line is deduced): const_cast<char*>("NaN"); | - |
| 2351 | if (rve) | 0 |
| 2352 | *rve = never executed: *rve = s[3] ? s + 8 : s + 3; | 0 |
| 2353 | #ifdef IEEE_Arith never executed: *rve = s[3] ? s + 8 : s + 3; | 0 |
| 2354 | s[3] ? s + 8 : never executed: *rve = s[3] ? s + 8 : s + 3; never evaluated: s[3] | 0 |
| 2355 | #endif never executed: *rve = s[3] ? s + 8 : s + 3; | 0 |
| 2356 | s + 3; never executed: *rve = s[3] ? s + 8 : s + 3; | 0 |
| 2357 | return s; never executed: return s; | 0 |
| 2358 | } | - |
| 2359 | #endif | - |
| 2360 | #ifdef IBM | - |
| 2361 | d += 0; /* normalize */ | - |
| 2362 | #endif | - |
| 2363 | if (d == g_double_zero) evaluated: d == g_double_zero| yes Evaluation Count:42177 | yes Evaluation Count:1463101 |
| 42177-1463101 |
| 2364 | { | - |
| 2365 | *decpt = 1; executed (the execution status of this line is deduced): *decpt = 1; | - |
| 2366 | s = const_cast<char*>("0"); executed (the execution status of this line is deduced): s = const_cast<char*>("0"); | - |
| 2367 | if (rve) partially evaluated: rve| yes Evaluation Count:42177 | no Evaluation Count:0 |
| 0-42177 |
| 2368 | *rve = s + 1; executed: *rve = s + 1;Execution Count:42177 | 42177 |
| 2369 | return s; executed: return s;Execution Count:42177 | 42177 |
| 2370 | } | - |
| 2371 | | - |
| 2372 | b = d2b(d, &be, &bbits); executed (the execution status of this line is deduced): b = d2b(d, &be, &bbits); | - |
| 2373 | #ifdef Sudden_Underflow | - |
| 2374 | i = (int)(getWord0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); | - |
| 2375 | #else | - |
| 2376 | if ((i = int(getWord0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1))) != 0) { evaluated: (i = int(getWord0(d) >> 20 & (0x7ff00000>>20))) != 0| yes Evaluation Count:1463091 | yes Evaluation Count:10 |
| 10-1463091 |
| 2377 | #endif | - |
| 2378 | d2 = d; executed (the execution status of this line is deduced): d2 = d; | - |
| 2379 | setWord0(&d2, getWord0(d2) & Frac_mask1); executed (the execution status of this line is deduced): setWord0(&d2, getWord0(d2) & 0xfffff); | - |
| 2380 | setWord0(&d2, getWord0(d2) | Exp_11); executed (the execution status of this line is deduced): setWord0(&d2, getWord0(d2) | 0x3ff00000); | - |
| 2381 | #ifdef IBM | - |
| 2382 | if (j = 11 - hi0bits(getWord0(d2) & Frac_mask)) | - |
| 2383 | d2 /= 1 << j; | - |
| 2384 | #endif | - |
| 2385 | | - |
| 2386 | /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 | - |
| 2387 | * log10(x) = log(x) / log(10) | - |
| 2388 | * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) | - |
| 2389 | * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) | - |
| 2390 | * | - |
| 2391 | * This suggests computing an approximation k to log10(d) by | - |
| 2392 | * | - |
| 2393 | * k = (i - Bias)*0.301029995663981 | - |
| 2394 | * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); | - |
| 2395 | * | - |
| 2396 | * We want k to be too large rather than too small. | - |
| 2397 | * The error in the first-order Taylor series approximation | - |
| 2398 | * is in our favor, so we just round up the constant enough | - |
| 2399 | * to compensate for any error in the multiplication of | - |
| 2400 | * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, | - |
| 2401 | * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, | - |
| 2402 | * adding 1e-13 to the constant term more than suffices. | - |
| 2403 | * Hence we adjust the constant term to 0.1760912590558. | - |
| 2404 | * (We could get a more accurate k by invoking log10, | - |
| 2405 | * but this is probably not worthwhile.) | - |
| 2406 | */ | - |
| 2407 | | - |
| 2408 | i -= Bias; executed (the execution status of this line is deduced): i -= 1023; | - |
| 2409 | #ifdef IBM | - |
| 2410 | i <<= 2; | - |
| 2411 | i += j; | - |
| 2412 | #endif | - |
| 2413 | #ifndef Sudden_Underflow | - |
| 2414 | denorm = 0; executed (the execution status of this line is deduced): denorm = 0; | - |
| 2415 | } executed: }Execution Count:1463091 | 1463091 |
| 2416 | else { | - |
| 2417 | /* d is denormalized */ | - |
| 2418 | | - |
| 2419 | i = bbits + be + (Bias + (P-1) - 1); executed (the execution status of this line is deduced): i = bbits + be + (1023 + (53 -1) - 1); | - |
| 2420 | x = i > 32 ? getWord0(d) << (64 - i) | getWord1(d) >> (i - 32) partially evaluated: i > 32| yes Evaluation Count:10 | no Evaluation Count:0 |
| 0-10 |
| 2421 | : getWord1(d) << (32 - i); executed (the execution status of this line is deduced): : getWord1(d) << (32 - i); | - |
| 2422 | d2 = x; executed (the execution status of this line is deduced): d2 = x; | - |
| 2423 | setWord0(&d2, getWord0(d2) - 31*Exp_msk1); /* adjust exponent */ executed (the execution status of this line is deduced): setWord0(&d2, getWord0(d2) - 31*0x100000); | - |
| 2424 | i -= (Bias + (P-1) - 1) + 1; executed (the execution status of this line is deduced): i -= (1023 + (53 -1) - 1) + 1; | - |
| 2425 | denorm = 1; executed (the execution status of this line is deduced): denorm = 1; | - |
| 2426 | } executed: }Execution Count:10 | 10 |
| 2427 | #endif | - |
| 2428 | ds = (d2-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; executed (the execution status of this line is deduced): ds = (d2-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; | - |
| 2429 | k = int(ds); executed (the execution status of this line is deduced): k = int(ds); | - |
| 2430 | if (ds < 0. && ds != k) evaluated: ds < 0.| yes Evaluation Count:49667 | yes Evaluation Count:1413434 |
partially evaluated: ds != k| yes Evaluation Count:49667 | no Evaluation Count:0 |
| 0-1413434 |
| 2431 | k--; /* want k = floor(ds) */ executed: k--;Execution Count:49667 | 49667 |
| 2432 | k_check = 1; executed (the execution status of this line is deduced): k_check = 1; | - |
| 2433 | if (k >= 0 && k <= Ten_pmax) { evaluated: k >= 0| yes Evaluation Count:1413434 | yes Evaluation Count:49667 |
evaluated: k <= 22| yes Evaluation Count:1410332 | yes Evaluation Count:3102 |
| 3102-1413434 |
| 2434 | if (d < tens[k]) evaluated: d < tens[k]| yes Evaluation Count:6950 | yes Evaluation Count:1403382 |
| 6950-1403382 |
| 2435 | k--; executed: k--;Execution Count:6950 | 6950 |
| 2436 | k_check = 0; executed (the execution status of this line is deduced): k_check = 0; | - |
| 2437 | } executed: }Execution Count:1410332 | 1410332 |
| 2438 | j = bbits - i - 1; executed (the execution status of this line is deduced): j = bbits - i - 1; | - |
| 2439 | if (j >= 0) { evaluated: j >= 0| yes Evaluation Count:662974 | yes Evaluation Count:800127 |
| 662974-800127 |
| 2440 | b2 = 0; executed (the execution status of this line is deduced): b2 = 0; | - |
| 2441 | s2 = j; executed (the execution status of this line is deduced): s2 = j; | - |
| 2442 | } executed: }Execution Count:662974 | 662974 |
| 2443 | else { | - |
| 2444 | b2 = -j; executed (the execution status of this line is deduced): b2 = -j; | - |
| 2445 | s2 = 0; executed (the execution status of this line is deduced): s2 = 0; | - |
| 2446 | } executed: }Execution Count:800127 | 800127 |
| 2447 | if (k >= 0) { evaluated: k >= 0| yes Evaluation Count:1410310 | yes Evaluation Count:52791 |
| 52791-1410310 |
| 2448 | b5 = 0; executed (the execution status of this line is deduced): b5 = 0; | - |
| 2449 | s5 = k; executed (the execution status of this line is deduced): s5 = k; | - |
| 2450 | s2 += k; executed (the execution status of this line is deduced): s2 += k; | - |
| 2451 | } executed: }Execution Count:1410310 | 1410310 |
| 2452 | else { | - |
| 2453 | b2 -= k; executed (the execution status of this line is deduced): b2 -= k; | - |
| 2454 | b5 = -k; executed (the execution status of this line is deduced): b5 = -k; | - |
| 2455 | s5 = 0; executed (the execution status of this line is deduced): s5 = 0; | - |
| 2456 | } executed: }Execution Count:52791 | 52791 |
| 2457 | if (mode < 0 || mode > 9) partially evaluated: mode < 0| no Evaluation Count:0 | yes Evaluation Count:1463101 |
partially evaluated: mode > 9| no Evaluation Count:0 | yes Evaluation Count:1463101 |
| 0-1463101 |
| 2458 | mode = 0; never executed: mode = 0; | 0 |
| 2459 | try_quick = 1; executed (the execution status of this line is deduced): try_quick = 1; | - |
| 2460 | if (mode > 5) { partially evaluated: mode > 5| no Evaluation Count:0 | yes Evaluation Count:1463101 |
| 0-1463101 |
| 2461 | mode -= 4; never executed (the execution status of this line is deduced): mode -= 4; | - |
| 2462 | try_quick = 0; never executed (the execution status of this line is deduced): try_quick = 0; | - |
| 2463 | } | 0 |
| 2464 | leftright = 1; executed (the execution status of this line is deduced): leftright = 1; | - |
| 2465 | switch(mode) { | - |
| 2466 | case 0: | - |
| 2467 | case 1: | - |
| 2468 | ilim = ilim1 = -1; never executed (the execution status of this line is deduced): ilim = ilim1 = -1; | - |
| 2469 | i = 18; never executed (the execution status of this line is deduced): i = 18; | - |
| 2470 | ndigits = 0; never executed (the execution status of this line is deduced): ndigits = 0; | - |
| 2471 | break; | 0 |
| 2472 | case 2: | - |
| 2473 | leftright = 0; executed (the execution status of this line is deduced): leftright = 0; | - |
| 2474 | /* no break */ | - |
| 2475 | case 4: code before this statement executed: case 4:Execution Count:1461963 | 1461963 |
| 2476 | if (ndigits <= 0) evaluated: ndigits <= 0| yes Evaluation Count:1681 | yes Evaluation Count:1460282 |
| 1681-1460282 |
| 2477 | ndigits = 1; executed: ndigits = 1;Execution Count:1681 | 1681 |
| 2478 | ilim = ilim1 = i = ndigits; executed (the execution status of this line is deduced): ilim = ilim1 = i = ndigits; | - |
| 2479 | break; executed: break;Execution Count:1461963 | 1461963 |
| 2480 | case 3: | - |
| 2481 | leftright = 0; executed (the execution status of this line is deduced): leftright = 0; | - |
| 2482 | /* no break */ | - |
| 2483 | case 5: code before this statement executed: case 5:Execution Count:1138 | 1138 |
| 2484 | i = ndigits + k + 1; executed (the execution status of this line is deduced): i = ndigits + k + 1; | - |
| 2485 | ilim = i; executed (the execution status of this line is deduced): ilim = i; | - |
| 2486 | ilim1 = i - 1; executed (the execution status of this line is deduced): ilim1 = i - 1; | - |
| 2487 | if (i <= 0) evaluated: i <= 0| yes Evaluation Count:3 | yes Evaluation Count:1135 |
| 3-1135 |
| 2488 | i = 1; executed: i = 1;Execution Count:3 | 3 |
| 2489 | } executed: }Execution Count:1138 | 1138 |
| 2490 | QT_TRY { | - |
| 2491 | *resultp = static_cast<char *>(malloc(i + 1)); executed (the execution status of this line is deduced): *resultp = static_cast<char *>(malloc(i + 1)); | - |
| 2492 | Q_CHECK_PTR(*resultp); never executed: qBadAlloc(); executed: }Execution Count:1463101 partially evaluated: !(*resultp)| no Evaluation Count:0 | yes Evaluation Count:1463101 |
partially evaluated: 0| no Evaluation Count:0 | yes Evaluation Count:1463101 |
| 0-1463101 |
| 2493 | } QT_CATCH(...) { executed: }Execution Count:1463101 | 1463101 |
| 2494 | Bfree(b); never executed (the execution status of this line is deduced): Bfree(b); | - |
| 2495 | QT_RETHROW; | 0 |
| 2496 | } | - |
| 2497 | s = s0 = *resultp; executed (the execution status of this line is deduced): s = s0 = *resultp; | - |
| 2498 | | - |
| 2499 | if (ilim >= 0 && ilim <= Quick_max && try_quick) { partially evaluated: ilim >= 0| yes Evaluation Count:1463101 | no Evaluation Count:0 |
evaluated: ilim <= 14| yes Evaluation Count:1460594 | yes Evaluation Count:2507 |
partially evaluated: try_quick| yes Evaluation Count:1460594 | no Evaluation Count:0 |
| 0-1463101 |
| 2500 | | - |
| 2501 | /* Try to get by with floating-point arithmetic. */ | - |
| 2502 | | - |
| 2503 | i = 0; executed (the execution status of this line is deduced): i = 0; | - |
| 2504 | d2 = d; executed (the execution status of this line is deduced): d2 = d; | - |
| 2505 | k0 = k; executed (the execution status of this line is deduced): k0 = k; | - |
| 2506 | ilim0 = ilim; executed (the execution status of this line is deduced): ilim0 = ilim; | - |
| 2507 | ieps = 2; /* conservative */ executed (the execution status of this line is deduced): ieps = 2; | - |
| 2508 | if (k > 0) { evaluated: k > 0| yes Evaluation Count:1330446 | yes Evaluation Count:130148 |
| 130148-1330446 |
| 2509 | ds = tens[k&0xf]; executed (the execution status of this line is deduced): ds = tens[k&0xf]; | - |
| 2510 | j = k >> 4; executed (the execution status of this line is deduced): j = k >> 4; | - |
| 2511 | if (j & Bletch) { evaluated: j & 0x10| yes Evaluation Count:223 | yes Evaluation Count:1330223 |
| 223-1330223 |
| 2512 | /* prevent overflows */ | - |
| 2513 | j &= Bletch - 1; executed (the execution status of this line is deduced): j &= 0x10 - 1; | - |
| 2514 | d /= bigtens[n_bigtens-1]; executed (the execution status of this line is deduced): d /= bigtens[5 -1]; | - |
| 2515 | ieps++; executed (the execution status of this line is deduced): ieps++; | - |
| 2516 | } executed: }Execution Count:223 | 223 |
| 2517 | for(; j; j >>= 1, i++) evaluated: j| yes Evaluation Count:6799 | yes Evaluation Count:1330446 |
| 6799-1330446 |
| 2518 | if (j & 1) { evaluated: j & 1| yes Evaluation Count:3639 | yes Evaluation Count:3160 |
| 3160-3639 |
| 2519 | ieps++; executed (the execution status of this line is deduced): ieps++; | - |
| 2520 | ds *= bigtens[i]; executed (the execution status of this line is deduced): ds *= bigtens[i]; | - |
| 2521 | } executed: }Execution Count:3639 | 3639 |
| 2522 | d /= ds; executed (the execution status of this line is deduced): d /= ds; | - |
| 2523 | } executed: }Execution Count:1330446 | 1330446 |
| 2524 | else if ((j1 = -k) != 0) { evaluated: (j1 = -k) != 0| yes Evaluation Count:51632 | yes Evaluation Count:78516 |
| 51632-78516 |
| 2525 | d *= tens[j1 & 0xf]; executed (the execution status of this line is deduced): d *= tens[j1 & 0xf]; | - |
| 2526 | for(j = j1 >> 4; j; j >>= 1, i++) evaluated: j| yes Evaluation Count:3890 | yes Evaluation Count:51632 |
| 3890-51632 |
| 2527 | if (j & 1) { evaluated: j & 1| yes Evaluation Count:2526 | yes Evaluation Count:1364 |
| 1364-2526 |
| 2528 | ieps++; executed (the execution status of this line is deduced): ieps++; | - |
| 2529 | d *= bigtens[i]; executed (the execution status of this line is deduced): d *= bigtens[i]; | - |
| 2530 | } executed: }Execution Count:2526 | 2526 |
| 2531 | } executed: }Execution Count:51632 | 51632 |
| 2532 | if (k_check && d < 1. && ilim > 0) { evaluated: k_check| yes Evaluation Count:51221 | yes Evaluation Count:1409373 |
evaluated: d < 1.| yes Evaluation Count:3920 | yes Evaluation Count:47301 |
partially evaluated: ilim > 0| yes Evaluation Count:3920 | no Evaluation Count:0 |
| 0-1409373 |
| 2533 | if (ilim1 <= 0) partially evaluated: ilim1 <= 0| no Evaluation Count:0 | yes Evaluation Count:3920 |
| 0-3920 |
| 2534 | goto fast_failed; never executed: goto fast_failed; | 0 |
| 2535 | ilim = ilim1; executed (the execution status of this line is deduced): ilim = ilim1; | - |
| 2536 | k--; executed (the execution status of this line is deduced): k--; | - |
| 2537 | d *= 10.; executed (the execution status of this line is deduced): d *= 10.; | - |
| 2538 | ieps++; executed (the execution status of this line is deduced): ieps++; | - |
| 2539 | } executed: }Execution Count:3920 | 3920 |
| 2540 | eps = ieps*d + 7.; executed (the execution status of this line is deduced): eps = ieps*d + 7.; | - |
| 2541 | setWord0(&eps, getWord0(eps) - (P-1)*Exp_msk1); executed (the execution status of this line is deduced): setWord0(&eps, getWord0(eps) - (53 -1)*0x100000); | - |
| 2542 | if (ilim == 0) { evaluated: ilim == 0| yes Evaluation Count:3 | yes Evaluation Count:1460591 |
| 3-1460591 |
| 2543 | S = mhi = 0; executed (the execution status of this line is deduced): S = mhi = 0; | - |
| 2544 | d -= 5.; executed (the execution status of this line is deduced): d -= 5.; | - |
| 2545 | if (d > eps) partially evaluated: d > eps| no Evaluation Count:0 | yes Evaluation Count:3 |
| 0-3 |
| 2546 | goto one_digit; never executed: goto one_digit; | 0 |
| 2547 | if (d < -eps) evaluated: d < -eps| yes Evaluation Count:2 | yes Evaluation Count:1 |
| 1-2 |
| 2548 | goto no_digits; executed: goto no_digits;Execution Count:2 | 2 |
| 2549 | goto fast_failed; executed: goto fast_failed;Execution Count:1 | 1 |
| 2550 | } | - |
| 2551 | #ifndef No_leftright | - |
| 2552 | if (leftright) { partially evaluated: leftright| no Evaluation Count:0 | yes Evaluation Count:1460591 |
| 0-1460591 |
| 2553 | /* Use Steele & White method of only | - |
| 2554 | * generating digits needed. | - |
| 2555 | */ | - |
| 2556 | eps = 0.5/tens[ilim-1] - eps; never executed (the execution status of this line is deduced): eps = 0.5/tens[ilim-1] - eps; | - |
| 2557 | for(i = 0;;) { never executed (the execution status of this line is deduced): for(i = 0;;) { | - |
| 2558 | L = Long(d); never executed (the execution status of this line is deduced): L = qint32(d); | - |
| 2559 | d -= L; never executed (the execution status of this line is deduced): d -= L; | - |
| 2560 | *s++ = '0' + int(L); never executed (the execution status of this line is deduced): *s++ = '0' + int(L); | - |
| 2561 | if (d < eps) | 0 |
| 2562 | goto ret1; never executed: goto ret1; | 0 |
| 2563 | if (1. - d < eps) never evaluated: 1. - d < eps | 0 |
| 2564 | goto bump_up; never executed: goto bump_up; | 0 |
| 2565 | if (++i >= ilim) never evaluated: ++i >= ilim | 0 |
| 2566 | break; | 0 |
| 2567 | eps *= 10.; never executed (the execution status of this line is deduced): eps *= 10.; | - |
| 2568 | d *= 10.; never executed (the execution status of this line is deduced): d *= 10.; | - |
| 2569 | } | 0 |
| 2570 | } | 0 |
| 2571 | else { | - |
| 2572 | #endif | - |
| 2573 | /* Generate ilim digits, then fix them up. */ | - |
| 2574 | #if defined(Q_OS_IRIX) && defined(Q_CC_GNU) | - |
| 2575 | // work around a bug on 64 bit IRIX gcc | - |
| 2576 | double *t = (double *) tens; | - |
| 2577 | eps *= t[ilim-1]; | - |
| 2578 | #else | - |
| 2579 | eps *= tens[ilim-1]; executed (the execution status of this line is deduced): eps *= tens[ilim-1]; | - |
| 2580 | #endif | - |
| 2581 | for(i = 1;; i++, d *= 10.) { executed (the execution status of this line is deduced): for(i = 1;; i++, d *= 10.) { | - |
| 2582 | L = Long(d); executed (the execution status of this line is deduced): L = qint32(d); | - |
| 2583 | d -= L; executed (the execution status of this line is deduced): d -= L; | - |
| 2584 | *s++ = '0' + int(L); executed (the execution status of this line is deduced): *s++ = '0' + int(L); | - |
| 2585 | if (i == ilim) { evaluated: i == ilim| yes Evaluation Count:1460591 | yes Evaluation Count:7279600 |
| 1460591-7279600 |
| 2586 | if (d > 0.5 + eps) evaluated: d > 0.5 + eps| yes Evaluation Count:422158 | yes Evaluation Count:1038433 |
| 422158-1038433 |
| 2587 | goto bump_up; executed: goto bump_up;Execution Count:422158 | 422158 |
| 2588 | else if (d < 0.5 - eps) { evaluated: d < 0.5 - eps| yes Evaluation Count:1038429 | yes Evaluation Count:4 |
| 4-1038429 |
| 2589 | while(*--s == '0') {} executed: }Execution Count:3900020 evaluated: *--s == '0'| yes Evaluation Count:3900020 | yes Evaluation Count:1038429 |
| 1038429-3900020 |
| 2590 | s++; executed (the execution status of this line is deduced): s++; | - |
| 2591 | goto ret1; executed: goto ret1;Execution Count:1038429 | 1038429 |
| 2592 | } | - |
| 2593 | break; executed: break;Execution Count:4 | 4 |
| 2594 | } | - |
| 2595 | } executed: }Execution Count:7279600 | 7279600 |
| 2596 | #ifndef No_leftright | - |
| 2597 | } executed: }Execution Count:4 | 4 |
| 2598 | #endif | - |
| 2599 | fast_failed: code before this statement executed: fast_failed:Execution Count:4 | 4 |
| 2600 | s = s0; executed (the execution status of this line is deduced): s = s0; | - |
| 2601 | d = d2; executed (the execution status of this line is deduced): d = d2; | - |
| 2602 | k = k0; executed (the execution status of this line is deduced): k = k0; | - |
| 2603 | ilim = ilim0; executed (the execution status of this line is deduced): ilim = ilim0; | - |
| 2604 | } executed: }Execution Count:5 | 5 |
| 2605 | | - |
| 2606 | /* Do we have a "small" integer? */ | - |
| 2607 | | - |
| 2608 | if (be >= 0 && k <= Int_max) { evaluated: be >= 0| yes Evaluation Count:735 | yes Evaluation Count:1777 |
evaluated: k <= 14| yes Evaluation Count:282 | yes Evaluation Count:453 |
| 282-1777 |
| 2609 | /* Yes. */ | - |
| 2610 | ds = tens[k]; executed (the execution status of this line is deduced): ds = tens[k]; | - |
| 2611 | if (ndigits < 0 && ilim <= 0) { partially evaluated: ndigits < 0| no Evaluation Count:0 | yes Evaluation Count:282 |
never evaluated: ilim <= 0 | 0-282 |
| 2612 | S = mhi = 0; never executed (the execution status of this line is deduced): S = mhi = 0; | - |
| 2613 | if (ilim < 0 || d <= 5*ds) never evaluated: ilim < 0 never evaluated: d <= 5*ds | 0 |
| 2614 | goto no_digits; never executed: goto no_digits; | 0 |
| 2615 | goto one_digit; never executed: goto one_digit; | 0 |
| 2616 | } | - |
| 2617 | for(i = 1;; i++) { executed (the execution status of this line is deduced): for(i = 1;; i++) { | - |
| 2618 | L = Long(d / ds); executed (the execution status of this line is deduced): L = qint32(d / ds); | - |
| 2619 | d -= L*ds; executed (the execution status of this line is deduced): d -= L*ds; | - |
| 2620 | #ifdef Check_FLT_ROUNDS | - |
| 2621 | /* If FLT_ROUNDS == 2, L will usually be high by 1 */ | - |
| 2622 | if (d < 0) { | - |
| 2623 | L--; | - |
| 2624 | d += ds; | - |
| 2625 | } | - |
| 2626 | #endif | - |
| 2627 | *s++ = '0' + int(L); executed (the execution status of this line is deduced): *s++ = '0' + int(L); | - |
| 2628 | if (i == ilim) { partially evaluated: i == ilim| no Evaluation Count:0 | yes Evaluation Count:331 |
| 0-331 |
| 2629 | d += d; never executed (the execution status of this line is deduced): d += d; | - |
| 2630 | if (d > ds || (d == ds && L & 1)) { never evaluated: d > ds never evaluated: d == ds never evaluated: L & 1 | 0 |
| 2631 | bump_up: | - |
| 2632 | while(*--s == '9') evaluated: *--s == '9'| yes Evaluation Count:1233417 | yes Evaluation Count:418602 |
| 418602-1233417 |
| 2633 | if (s == s0) { evaluated: s == s0| yes Evaluation Count:3556 | yes Evaluation Count:1229861 |
| 3556-1229861 |
| 2634 | k++; executed (the execution status of this line is deduced): k++; | - |
| 2635 | *s = '0'; executed (the execution status of this line is deduced): *s = '0'; | - |
| 2636 | break; executed: break;Execution Count:3556 | 3556 |
| 2637 | } | - |
| 2638 | ++*s++; executed (the execution status of this line is deduced): ++*s++; | - |
| 2639 | } executed: }Execution Count:422158 | 422158 |
| 2640 | break; executed: break;Execution Count:422158 | 422158 |
| 2641 | } | - |
| 2642 | if ((d *= 10.) == g_double_zero) evaluated: (d *= 10.) == g_double_zero| yes Evaluation Count:282 | yes Evaluation Count:49 |
| 49-282 |
| 2643 | break; executed: break;Execution Count:282 | 282 |
| 2644 | } executed: }Execution Count:49 | 49 |
| 2645 | goto ret1; executed: goto ret1;Execution Count:422440 | 422440 |
| 2646 | } | - |
| 2647 | | - |
| 2648 | m2 = b2; executed (the execution status of this line is deduced): m2 = b2; | - |
| 2649 | m5 = b5; executed (the execution status of this line is deduced): m5 = b5; | - |
| 2650 | mhi = mlo = 0; executed (the execution status of this line is deduced): mhi = mlo = 0; | - |
| 2651 | if (leftright) { partially evaluated: leftright| no Evaluation Count:0 | yes Evaluation Count:2230 |
| 0-2230 |
| 2652 | if (mode < 2) { never evaluated: mode < 2 | 0 |
| 2653 | i = never executed (the execution status of this line is deduced): i = | - |
| 2654 | #ifndef Sudden_Underflow never executed (the execution status of this line is deduced): | - |
| 2655 | denorm ? be + (Bias + (P-1) - 1 + 1) : | 0 |
| 2656 | #endif never executed (the execution status of this line is deduced): | - |
| 2657 | #ifdef IBM never executed (the execution status of this line is deduced): | - |
| 2658 | 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); never executed (the execution status of this line is deduced): | - |
| 2659 | #else never executed (the execution status of this line is deduced): | - |
| 2660 | 1 + P - bbits; never executed (the execution status of this line is deduced): 1 + 53 - bbits; | - |
| 2661 | #endif | - |
| 2662 | } | 0 |
| 2663 | else { | - |
| 2664 | j = ilim - 1; never executed (the execution status of this line is deduced): j = ilim - 1; | - |
| 2665 | if (m5 >= j) | 0 |
| 2666 | m5 -= j; | 0 |
| 2667 | else { | - |
| 2668 | s5 += j -= m5; never executed (the execution status of this line is deduced): s5 += j -= m5; | - |
| 2669 | b5 += j; never executed (the execution status of this line is deduced): b5 += j; | - |
| 2670 | m5 = 0; never executed (the execution status of this line is deduced): m5 = 0; | - |
| 2671 | } | 0 |
| 2672 | if ((i = ilim) < 0) { never evaluated: (i = ilim) < 0 | 0 |
| 2673 | m2 -= i; never executed (the execution status of this line is deduced): m2 -= i; | - |
| 2674 | i = 0; never executed (the execution status of this line is deduced): i = 0; | - |
| 2675 | } | 0 |
| 2676 | } | 0 |
| 2677 | b2 += i; never executed (the execution status of this line is deduced): b2 += i; | - |
| 2678 | s2 += i; never executed (the execution status of this line is deduced): s2 += i; | - |
| 2679 | mhi = i2b(1); never executed (the execution status of this line is deduced): mhi = i2b(1); | - |
| 2680 | } | 0 |
| 2681 | if (m2 > 0 && s2 > 0) { evaluated: m2 > 0| yes Evaluation Count:1613 | yes Evaluation Count:617 |
partially evaluated: s2 > 0| yes Evaluation Count:1613 | no Evaluation Count:0 |
| 0-1613 |
| 2682 | i = m2 < s2 ? m2 : s2; evaluated: m2 < s2| yes Evaluation Count:1160 | yes Evaluation Count:453 |
| 453-1160 |
| 2683 | b2 -= i; executed (the execution status of this line is deduced): b2 -= i; | - |
| 2684 | m2 -= i; executed (the execution status of this line is deduced): m2 -= i; | - |
| 2685 | s2 -= i; executed (the execution status of this line is deduced): s2 -= i; | - |
| 2686 | } executed: }Execution Count:1613 | 1613 |
| 2687 | if (b5 > 0) { evaluated: b5 > 0| yes Evaluation Count:1160 | yes Evaluation Count:1070 |
| 1070-1160 |
| 2688 | if (leftright) { partially evaluated: leftright| no Evaluation Count:0 | yes Evaluation Count:1160 |
| 0-1160 |
| 2689 | if (m5 > 0) { | 0 |
| 2690 | mhi = pow5mult(mhi, m5); never executed (the execution status of this line is deduced): mhi = pow5mult(mhi, m5); | - |
| 2691 | b1 = mult(mhi, b); never executed (the execution status of this line is deduced): b1 = mult(mhi, b); | - |
| 2692 | Bfree(b); never executed (the execution status of this line is deduced): Bfree(b); | - |
| 2693 | b = b1; never executed (the execution status of this line is deduced): b = b1; | - |
| 2694 | } | 0 |
| 2695 | if ((j = b5 - m5) != 0) never evaluated: (j = b5 - m5) != 0 | 0 |
| 2696 | b = pow5mult(b, j); never executed: b = pow5mult(b, j); | 0 |
| 2697 | } | 0 |
| 2698 | else | - |
| 2699 | b = pow5mult(b, b5); executed: b = pow5mult(b, b5);Execution Count:1160 | 1160 |
| 2700 | } | - |
| 2701 | S = i2b(1); executed (the execution status of this line is deduced): S = i2b(1); | - |
| 2702 | if (s5 > 0) evaluated: s5 > 0| yes Evaluation Count:619 | yes Evaluation Count:1611 |
| 619-1611 |
| 2703 | S = pow5mult(S, s5); executed: S = pow5mult(S, s5);Execution Count:619 | 619 |
| 2704 | | - |
| 2705 | /* Check for special case that d is a normalized power of 2. */ | - |
| 2706 | | - |
| 2707 | if (mode < 2) { partially evaluated: mode < 2| no Evaluation Count:0 | yes Evaluation Count:2230 |
| 0-2230 |
| 2708 | if (!getWord1(d) && !(getWord0(d) & Bndry_mask) never evaluated: !getWord1(d) never evaluated: !(getWord0(d) & 0xfffff) | 0 |
| 2709 | #ifndef Sudden_Underflow never executed (the execution status of this line is deduced): | - |
| 2710 | && getWord0(d) & Exp_mask never evaluated: getWord0(d) & 0x7ff00000 | 0 |
| 2711 | #endif | - |
| 2712 | ) { | - |
| 2713 | /* The special case */ | - |
| 2714 | b2 += Log2P; never executed (the execution status of this line is deduced): b2 += 1; | - |
| 2715 | s2 += Log2P; never executed (the execution status of this line is deduced): s2 += 1; | - |
| 2716 | spec_case = 1; never executed (the execution status of this line is deduced): spec_case = 1; | - |
| 2717 | } | 0 |
| 2718 | else | - |
| 2719 | spec_case = 0; never executed: spec_case = 0; | 0 |
| 2720 | } | - |
| 2721 | | - |
| 2722 | /* Arrange for convenient computation of quotients: | - |
| 2723 | * shift left if necessary so divisor has 4 leading 0 bits. | - |
| 2724 | * | - |
| 2725 | * Perhaps we should just compute leading 28 bits of S once | - |
| 2726 | * and for all and pass them and a shift to quorem, so it | - |
| 2727 | * can do shifts and ors to compute the numerator for q. | - |
| 2728 | */ | - |
| 2729 | #ifdef Pack_32 | - |
| 2730 | if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f) != 0) partially evaluated: (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f) != 0| yes Evaluation Count:2230 | no Evaluation Count:0 |
evaluated: s5| yes Evaluation Count:619 | yes Evaluation Count:1611 |
| 0-2230 |
| 2731 | i = 32 - i; executed: i = 32 - i;Execution Count:2230 | 2230 |
| 2732 | #else | - |
| 2733 | if (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf) | - |
| 2734 | i = 16 - i; | - |
| 2735 | #endif | - |
| 2736 | if (i > 4) { evaluated: i > 4| yes Evaluation Count:2102 | yes Evaluation Count:128 |
| 128-2102 |
| 2737 | i -= 4; executed (the execution status of this line is deduced): i -= 4; | - |
| 2738 | b2 += i; executed (the execution status of this line is deduced): b2 += i; | - |
| 2739 | m2 += i; executed (the execution status of this line is deduced): m2 += i; | - |
| 2740 | s2 += i; executed (the execution status of this line is deduced): s2 += i; | - |
| 2741 | } executed: }Execution Count:2102 | 2102 |
| 2742 | else if (i < 4) { evaluated: i < 4| yes Evaluation Count:64 | yes Evaluation Count:64 |
| 64 |
| 2743 | i += 28; executed (the execution status of this line is deduced): i += 28; | - |
| 2744 | b2 += i; executed (the execution status of this line is deduced): b2 += i; | - |
| 2745 | m2 += i; executed (the execution status of this line is deduced): m2 += i; | - |
| 2746 | s2 += i; executed (the execution status of this line is deduced): s2 += i; | - |
| 2747 | } executed: }Execution Count:64 | 64 |
| 2748 | if (b2 > 0) evaluated: b2 > 0| yes Evaluation Count:2166 | yes Evaluation Count:64 |
| 64-2166 |
| 2749 | b = lshift(b, b2); executed: b = lshift(b, b2);Execution Count:2166 | 2166 |
| 2750 | if (s2 > 0) partially evaluated: s2 > 0| yes Evaluation Count:2230 | no Evaluation Count:0 |
| 0-2230 |
| 2751 | S = lshift(S, s2); executed: S = lshift(S, s2);Execution Count:2230 | 2230 |
| 2752 | if (k_check) { evaluated: k_check| yes Evaluation Count:1549 | yes Evaluation Count:681 |
| 681-1549 |
| 2753 | if (cmp(b,S) < 0) { evaluated: cmp(b,S) < 0| yes Evaluation Count:512 | yes Evaluation Count:1037 |
| 512-1037 |
| 2754 | k--; executed (the execution status of this line is deduced): k--; | - |
| 2755 | b = multadd(b, 10, 0); /* we botched the k estimate */ executed (the execution status of this line is deduced): b = multadd(b, 10, 0); | - |
| 2756 | if (leftright) partially evaluated: leftright| no Evaluation Count:0 | yes Evaluation Count:512 |
| 0-512 |
| 2757 | mhi = multadd(mhi, 10, 0); never executed: mhi = multadd(mhi, 10, 0); | 0 |
| 2758 | ilim = ilim1; executed (the execution status of this line is deduced): ilim = ilim1; | - |
| 2759 | } executed: }Execution Count:512 | 512 |
| 2760 | } executed: }Execution Count:1549 | 1549 |
| 2761 | if (ilim <= 0 && mode > 2) { evaluated: ilim <= 0| yes Evaluation Count:1 | yes Evaluation Count:2229 |
partially evaluated: mode > 2| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-2229 |
| 2762 | if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) { partially evaluated: ilim < 0| no Evaluation Count:0 | yes Evaluation Count:1 |
partially evaluated: cmp(b,S = multadd(S,5,0)) <= 0| no Evaluation Count:0 | yes Evaluation Count:1 |
| 0-1 |
| 2763 | /* no digits, fcvt style */ | - |
| 2764 | no_digits: | - |
| 2765 | k = -1 - ndigits; executed (the execution status of this line is deduced): k = -1 - ndigits; | - |
| 2766 | goto ret; executed: goto ret;Execution Count:2 | 2 |
| 2767 | } | - |
| 2768 | one_digit: code before this statement executed: one_digit:Execution Count:1 | 1 |
| 2769 | *s++ = '1'; executed (the execution status of this line is deduced): *s++ = '1'; | - |
| 2770 | k++; executed (the execution status of this line is deduced): k++; | - |
| 2771 | goto ret; executed: goto ret;Execution Count:1 | 1 |
| 2772 | } | - |
| 2773 | if (leftright) { partially evaluated: leftright| no Evaluation Count:0 | yes Evaluation Count:2229 |
| 0-2229 |
| 2774 | if (m2 > 0) | 0 |
| 2775 | mhi = lshift(mhi, m2); never executed: mhi = lshift(mhi, m2); | 0 |
| 2776 | | - |
| 2777 | /* Compute mlo -- check for special case | - |
| 2778 | * that d is a normalized power of 2. | - |
| 2779 | */ | - |
| 2780 | | - |
| 2781 | mlo = mhi; never executed (the execution status of this line is deduced): mlo = mhi; | - |
| 2782 | if (spec_case) { never evaluated: spec_case | 0 |
| 2783 | mhi = Balloc(mhi->k); never executed (the execution status of this line is deduced): mhi = Balloc(mhi->k); | - |
| 2784 | Bcopy(mhi, mlo); never executed (the execution status of this line is deduced): memcpy(reinterpret_cast<char *>(&mhi->sign), reinterpret_cast<char *>(&mlo->sign), mlo->wds*sizeof(qint32) + 2*sizeof(int)); | - |
| 2785 | mhi = lshift(mhi, Log2P); never executed (the execution status of this line is deduced): mhi = lshift(mhi, 1); | - |
| 2786 | } | 0 |
| 2787 | | - |
| 2788 | for(i = 1;;i++) { never executed (the execution status of this line is deduced): for(i = 1;;i++) { | - |
| 2789 | dig = quorem(b,S) + '0'; never executed (the execution status of this line is deduced): dig = quorem(b,S) + '0'; | - |
| 2790 | /* Do we yet have the shortest decimal string | - |
| 2791 | * that will round to d? | - |
| 2792 | */ | - |
| 2793 | j = cmp(b, mlo); never executed (the execution status of this line is deduced): j = cmp(b, mlo); | - |
| 2794 | delta = diff(S, mhi); never executed (the execution status of this line is deduced): delta = diff(S, mhi); | - |
| 2795 | j1 = delta->sign ? 1 : cmp(b, delta); never evaluated: delta->sign | 0 |
| 2796 | Bfree(delta); never executed (the execution status of this line is deduced): Bfree(delta); | - |
| 2797 | #ifndef ROUND_BIASED | - |
| 2798 | if (j1 == 0 && !mode && !(getWord1(d) & 1)) { never evaluated: j1 == 0 never evaluated: !mode never evaluated: !(getWord1(d) & 1) | 0 |
| 2799 | if (dig == '9') never evaluated: dig == '9' | 0 |
| 2800 | goto round_9_up; never executed: goto round_9_up; | 0 |
| 2801 | if (j > 0) | 0 |
| 2802 | dig++; | 0 |
| 2803 | *s++ = dig; never executed (the execution status of this line is deduced): *s++ = dig; | - |
| 2804 | goto ret; never executed: goto ret; | 0 |
| 2805 | } | - |
| 2806 | #endif | - |
| 2807 | if (j < 0 || (j == 0 && !mode never evaluated: j < 0 never evaluated: j == 0 never evaluated: !mode | 0 |
| 2808 | #ifndef ROUND_BIASED never executed (the execution status of this line is deduced): | - |
| 2809 | && !(getWord1(d) & 1) never evaluated: !(getWord1(d) & 1) | 0 |
| 2810 | #endif never executed (the execution status of this line is deduced): | - |
| 2811 | )) { never executed (the execution status of this line is deduced): )) { | - |
| 2812 | if (j1 > 0) { | 0 |
| 2813 | b = lshift(b, 1); never executed (the execution status of this line is deduced): b = lshift(b, 1); | - |
| 2814 | j1 = cmp(b, S); never executed (the execution status of this line is deduced): j1 = cmp(b, S); | - |
| 2815 | if ((j1 > 0 || (j1 == 0 && dig & 1)) never evaluated: j1 > 0 never evaluated: j1 == 0 never evaluated: dig & 1 | 0 |
| 2816 | && dig++ == '9') never evaluated: dig++ == '9' | 0 |
| 2817 | goto round_9_up; never executed: goto round_9_up; | 0 |
| 2818 | } | 0 |
| 2819 | *s++ = dig; never executed (the execution status of this line is deduced): *s++ = dig; | - |
| 2820 | goto ret; never executed: goto ret; | 0 |
| 2821 | } | - |
| 2822 | if (j1 > 0) { | 0 |
| 2823 | if (dig == '9') { /* possible if i == 1 */ never evaluated: dig == '9' | 0 |
| 2824 | round_9_up: | - |
| 2825 | *s++ = '9'; never executed (the execution status of this line is deduced): *s++ = '9'; | - |
| 2826 | goto roundoff; never executed: goto roundoff; | 0 |
| 2827 | } | - |
| 2828 | *s++ = dig + 1; never executed (the execution status of this line is deduced): *s++ = dig + 1; | - |
| 2829 | goto ret; never executed: goto ret; | 0 |
| 2830 | } | - |
| 2831 | *s++ = dig; never executed (the execution status of this line is deduced): *s++ = dig; | - |
| 2832 | if (i == ilim) never evaluated: i == ilim | 0 |
| 2833 | break; | 0 |
| 2834 | b = multadd(b, 10, 0); never executed (the execution status of this line is deduced): b = multadd(b, 10, 0); | - |
| 2835 | if (mlo == mhi) never evaluated: mlo == mhi | 0 |
| 2836 | mlo = mhi = multadd(mhi, 10, 0); never executed: mlo = mhi = multadd(mhi, 10, 0); | 0 |
| 2837 | else { | - |
| 2838 | mlo = multadd(mlo, 10, 0); never executed (the execution status of this line is deduced): mlo = multadd(mlo, 10, 0); | - |
| 2839 | mhi = multadd(mhi, 10, 0); never executed (the execution status of this line is deduced): mhi = multadd(mhi, 10, 0); | - |
| 2840 | } | 0 |
| 2841 | } | - |
| 2842 | } | 0 |
| 2843 | else | - |
| 2844 | for(i = 1;; i++) { executed (the execution status of this line is deduced): for(i = 1;; i++) { | - |
| 2845 | *s++ = dig = quorem(b,S) + '0'; executed (the execution status of this line is deduced): *s++ = dig = quorem(b,S) + '0'; | - |
| 2846 | if (i >= ilim) evaluated: i >= ilim| yes Evaluation Count:2229 | yes Evaluation Count:122213 |
| 2229-122213 |
| 2847 | break; executed: break;Execution Count:2229 | 2229 |
| 2848 | b = multadd(b, 10, 0); executed (the execution status of this line is deduced): b = multadd(b, 10, 0); | - |
| 2849 | } executed: }Execution Count:122213 | 122213 |
| 2850 | | - |
| 2851 | /* Round off last digit */ | - |
| 2852 | | - |
| 2853 | b = lshift(b, 1); executed (the execution status of this line is deduced): b = lshift(b, 1); | - |
| 2854 | j = cmp(b, S); executed (the execution status of this line is deduced): j = cmp(b, S); | - |
| 2855 | if (j > 0 || (j == 0 && dig & 1)) { evaluated: j > 0| yes Evaluation Count:910 | yes Evaluation Count:1319 |
evaluated: j == 0| yes Evaluation Count:68 | yes Evaluation Count:1251 |
evaluated: dig & 1| yes Evaluation Count:64 | yes Evaluation Count:4 |
| 4-1319 |
| 2856 | roundoff: | - |
| 2857 | while(*--s == '9') evaluated: *--s == '9'| yes Evaluation Count:284 | yes Evaluation Count:974 |
| 284-974 |
| 2858 | if (s == s0) { partially evaluated: s == s0| no Evaluation Count:0 | yes Evaluation Count:284 |
| 0-284 |
| 2859 | k++; never executed (the execution status of this line is deduced): k++; | - |
| 2860 | *s++ = '1'; never executed (the execution status of this line is deduced): *s++ = '1'; | - |
| 2861 | goto ret; never executed: goto ret; | 0 |
| 2862 | } | - |
| 2863 | ++*s++; executed (the execution status of this line is deduced): ++*s++; | - |
| 2864 | } executed: }Execution Count:974 | 974 |
| 2865 | else { | - |
| 2866 | while(*--s == '0') {} executed: }Execution Count:3515 evaluated: *--s == '0'| yes Evaluation Count:3515 | yes Evaluation Count:1255 |
| 1255-3515 |
| 2867 | s++; executed (the execution status of this line is deduced): s++; | - |
| 2868 | } executed: }Execution Count:1255 | 1255 |
| 2869 | ret: code before this statement executed: ret:Execution Count:2229 | 2229 |
| 2870 | Bfree(S); executed (the execution status of this line is deduced): Bfree(S); | - |
| 2871 | if (mhi) { partially evaluated: mhi| no Evaluation Count:0 | yes Evaluation Count:2232 |
| 0-2232 |
| 2872 | if (mlo && mlo != mhi) never evaluated: mlo never evaluated: mlo != mhi | 0 |
| 2873 | Bfree(mlo); never executed: Bfree(mlo); | 0 |
| 2874 | Bfree(mhi); never executed (the execution status of this line is deduced): Bfree(mhi); | - |
| 2875 | } | 0 |
| 2876 | ret1: code before this statement executed: ret1:Execution Count:2232 | 2232 |
| 2877 | Bfree(b); executed (the execution status of this line is deduced): Bfree(b); | - |
| 2878 | if (s == s0) { /* don't return empty string */ evaluated: s == s0| yes Evaluation Count:2 | yes Evaluation Count:1463099 |
| 2-1463099 |
| 2879 | *s++ = '0'; executed (the execution status of this line is deduced): *s++ = '0'; | - |
| 2880 | k = 0; executed (the execution status of this line is deduced): k = 0; | - |
| 2881 | } executed: }Execution Count:2 | 2 |
| 2882 | *s = 0; executed (the execution status of this line is deduced): *s = 0; | - |
| 2883 | *decpt = k + 1; executed (the execution status of this line is deduced): *decpt = k + 1; | - |
| 2884 | if (rve) partially evaluated: rve| yes Evaluation Count:1463101 | no Evaluation Count:0 |
| 0-1463101 |
| 2885 | *rve = s; executed: *rve = s;Execution Count:1463101 | 1463101 |
| 2886 | return s0; executed: return s0;Execution Count:1463101 | 1463101 |
| 2887 | } | - |
| 2888 | #else | - |
| 2889 | // NOT thread safe! | - |
| 2890 | | - |
| 2891 | #include <errno.h> | - |
| 2892 | | - |
| 2893 | Q_CORE_EXPORT char *qdtoa( double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp) | - |
| 2894 | { | - |
| 2895 | if(rve) | - |
| 2896 | *rve = 0; | - |
| 2897 | | - |
| 2898 | char *res; | - |
| 2899 | if (mode == 0) | - |
| 2900 | ndigits = 80; | - |
| 2901 | | - |
| 2902 | if (mode == 3) | - |
| 2903 | res = fcvt(d, ndigits, decpt, sign); | - |
| 2904 | else | - |
| 2905 | res = ecvt(d, ndigits, decpt, sign); | - |
| 2906 | | - |
| 2907 | int n = qstrlen(res); | - |
| 2908 | if (mode == 0) { // remove trailing 0's | - |
| 2909 | const int stop = qMax(1, *decpt); | - |
| 2910 | int i; | - |
| 2911 | for (i = n-1; i >= stop; --i) { | - |
| 2912 | if (res[i] != '0') | - |
| 2913 | break; | - |
| 2914 | } | - |
| 2915 | n = i + 1; | - |
| 2916 | } | - |
| 2917 | *resultp = static_cast<char*>(malloc(n + 1)); | - |
| 2918 | Q_CHECK_PTR(resultp); | - |
| 2919 | qstrncpy(*resultp, res, n + 1); | - |
| 2920 | return *resultp; | - |
| 2921 | } | - |
| 2922 | | - |
| 2923 | Q_CORE_EXPORT double qstrtod(const char *s00, const char **se, bool *ok) | - |
| 2924 | { | - |
| 2925 | double ret = strtod((char*)s00, (char**)se); | - |
| 2926 | if (ok) { | - |
| 2927 | if((ret == 0.0l && errno == ERANGE) | - |
| 2928 | || ret == HUGE_VAL || ret == -HUGE_VAL) | - |
| 2929 | *ok = false; | - |
| 2930 | else | - |
| 2931 | *ok = true; // the result will be that we don't report underflow in this case | - |
| 2932 | } | - |
| 2933 | return ret; | - |
| 2934 | } | - |
| 2935 | | - |
| 2936 | #endif // QT_QLOCALE_USES_FCVT | - |
| 2937 | | - |
| 2938 | QT_END_NAMESPACE | - |
| 2939 | | - |
| | |