Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
JDK 11 java.base.jmod - Base Module
JDK 11 java.base.jmod is the JMOD file for JDK 11 Base module.
JDK 11 Base module compiled class files are stored in \fyicenter\jdk-11.0.1\jmods\java.base.jmod.
JDK 11 Base module compiled class files are also linked and stored in the \fyicenter\jdk-11.0.1\lib\modules JImage file.
JDK 11 Base module source code files are stored in \fyicenter\jdk-11.0.1\lib\src.zip\java.base.
You can click and view the content of each source code file in the list below.
✍: FYIcenter
⏎ jdk/internal/math/FormattedFloatingDecimal.java
/* * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package jdk.internal.math; import java.util.Arrays; public class FormattedFloatingDecimal{ public enum Form { SCIENTIFIC, COMPATIBLE, DECIMAL_FLOAT, GENERAL }; public static FormattedFloatingDecimal valueOf(double d, int precision, Form form){ FloatingDecimal.BinaryToASCIIConverter fdConverter = FloatingDecimal.getBinaryToASCIIConverter(d, form == Form.COMPATIBLE); return new FormattedFloatingDecimal(precision,form, fdConverter); } private int decExponentRounded; private char[] mantissa; private char[] exponent; private static final ThreadLocal<Object> threadLocalCharBuffer = new ThreadLocal<Object>() { @Override protected Object initialValue() { return new char[20]; } }; private static char[] getBuffer(){ return (char[]) threadLocalCharBuffer.get(); } private FormattedFloatingDecimal(int precision, Form form, FloatingDecimal.BinaryToASCIIConverter fdConverter) { if (fdConverter.isExceptional()) { this.mantissa = fdConverter.toJavaFormatString().toCharArray(); this.exponent = null; return; } char[] digits = getBuffer(); int nDigits = fdConverter.getDigits(digits); int decExp = fdConverter.getDecimalExponent(); int exp; boolean isNegative = fdConverter.isNegative(); switch (form) { case COMPATIBLE: exp = decExp; this.decExponentRounded = exp; fillCompatible(precision, digits, nDigits, exp, isNegative); break; case DECIMAL_FLOAT: exp = applyPrecision(decExp, digits, nDigits, decExp + precision); fillDecimal(precision, digits, nDigits, exp, isNegative); this.decExponentRounded = exp; break; case SCIENTIFIC: exp = applyPrecision(decExp, digits, nDigits, precision + 1); fillScientific(precision, digits, nDigits, exp, isNegative); this.decExponentRounded = exp; break; case GENERAL: exp = applyPrecision(decExp, digits, nDigits, precision); // adjust precision to be the number of digits to right of decimal // the real exponent to be output is actually exp - 1, not exp if (exp - 1 < -4 || exp - 1 >= precision) { // form = Form.SCIENTIFIC; precision--; fillScientific(precision, digits, nDigits, exp, isNegative); } else { // form = Form.DECIMAL_FLOAT; precision = precision - exp; fillDecimal(precision, digits, nDigits, exp, isNegative); } this.decExponentRounded = exp; break; default: assert false; } } // returns the exponent after rounding has been done by applyPrecision public int getExponentRounded() { return decExponentRounded - 1; } /** * Returns the mantissa as a {@code char[]}. Note that the returned value * is a reference to the internal {@code char[]} containing the mantissa, * therefore code invoking this method should not pass the return value to * external code but should in that case make a copy. * * @return a reference to the internal {@code char[]} representing the * mantissa. */ public char[] getMantissa(){ return mantissa; } /** * Returns the exponent as a {@code char[]}. Note that the returned value * is a reference to the internal {@code char[]} containing the exponent, * therefore code invoking this method should not pass the return value to * external code but should in that case make a copy. * * @return a reference to the internal {@code char[]} representing the * exponent. */ public char[] getExponent(){ return exponent; } /** * Returns new decExp in case of overflow. */ private static int applyPrecision(int decExp, char[] digits, int nDigits, int prec) { if (prec >= nDigits || prec < 0) { // no rounding necessary return decExp; } if (prec == 0) { // only one digit (0 or 1) is returned because the precision // excludes all significant digits if (digits[0] >= '5') { digits[0] = '1'; Arrays.fill(digits, 1, nDigits, '0'); return decExp + 1; } else { Arrays.fill(digits, 0, nDigits, '0'); return decExp; } } int q = digits[prec]; if (q >= '5') { int i = prec; q = digits[--i]; if ( q == '9' ) { while ( q == '9' && i > 0 ){ q = digits[--i]; } if ( q == '9' ){ // carryout! High-order 1, rest 0s, larger exp. digits[0] = '1'; Arrays.fill(digits, 1, nDigits, '0'); return decExp+1; } } digits[i] = (char)(q + 1); Arrays.fill(digits, i+1, nDigits, '0'); } else { Arrays.fill(digits, prec, nDigits, '0'); } return decExp; } /** * Fills mantissa and exponent char arrays for compatible format. */ private void fillCompatible(int precision, char[] digits, int nDigits, int exp, boolean isNegative) { int startIndex = isNegative ? 1 : 0; if (exp > 0 && exp < 8) { // print digits.digits. if (nDigits < exp) { int extraZeros = exp - nDigits; mantissa = create(isNegative, nDigits + extraZeros + 2); System.arraycopy(digits, 0, mantissa, startIndex, nDigits); Arrays.fill(mantissa, startIndex + nDigits, startIndex + nDigits + extraZeros, '0'); mantissa[startIndex + nDigits + extraZeros] = '.'; mantissa[startIndex + nDigits + extraZeros+1] = '0'; } else if (exp < nDigits) { int t = Math.min(nDigits - exp, precision); mantissa = create(isNegative, exp + 1 + t); System.arraycopy(digits, 0, mantissa, startIndex, exp); mantissa[startIndex + exp ] = '.'; System.arraycopy(digits, exp, mantissa, startIndex+exp+1, t); } else { // exp == digits.length mantissa = create(isNegative, nDigits + 2); System.arraycopy(digits, 0, mantissa, startIndex, nDigits); mantissa[startIndex + nDigits ] = '.'; mantissa[startIndex + nDigits +1] = '0'; } } else if (exp <= 0 && exp > -3) { int zeros = Math.max(0, Math.min(-exp, precision)); int t = Math.max(0, Math.min(nDigits, precision + exp)); // write '0' s before the significant digits if (zeros > 0) { mantissa = create(isNegative, zeros + 2 + t); mantissa[startIndex] = '0'; mantissa[startIndex+1] = '.'; Arrays.fill(mantissa, startIndex + 2, startIndex + 2 + zeros, '0'); if (t > 0) { // copy only when significant digits are within the precision System.arraycopy(digits, 0, mantissa, startIndex + 2 + zeros, t); } } else if (t > 0) { mantissa = create(isNegative, zeros + 2 + t); mantissa[startIndex] = '0'; mantissa[startIndex + 1] = '.'; // copy only when significant digits are within the precision System.arraycopy(digits, 0, mantissa, startIndex + 2, t); } else { this.mantissa = create(isNegative, 1); this.mantissa[startIndex] = '0'; } } else { if (nDigits > 1) { mantissa = create(isNegative, nDigits + 1); mantissa[startIndex] = digits[0]; mantissa[startIndex + 1] = '.'; System.arraycopy(digits, 1, mantissa, startIndex + 2, nDigits - 1); } else { mantissa = create(isNegative, 3); mantissa[startIndex] = digits[0]; mantissa[startIndex + 1] = '.'; mantissa[startIndex + 2] = '0'; } int e, expStartIntex; boolean isNegExp = (exp <= 0); if (isNegExp) { e = -exp + 1; expStartIntex = 1; } else { e = exp - 1; expStartIntex = 0; } // decExponent has 1, 2, or 3, digits if (e <= 9) { exponent = create(isNegExp,1); exponent[expStartIntex] = (char) (e + '0'); } else if (e <= 99) { exponent = create(isNegExp,2); exponent[expStartIntex] = (char) (e / 10 + '0'); exponent[expStartIntex+1] = (char) (e % 10 + '0'); } else { exponent = create(isNegExp,3); exponent[expStartIntex] = (char) (e / 100 + '0'); e %= 100; exponent[expStartIntex+1] = (char) (e / 10 + '0'); exponent[expStartIntex+2] = (char) (e % 10 + '0'); } } } private static char[] create(boolean isNegative, int size) { if(isNegative) { char[] r = new char[size +1]; r[0] = '-'; return r; } else { return new char[size]; } } /* * Fills mantissa char arrays for DECIMAL_FLOAT format. * Exponent should be equal to null. */ private void fillDecimal(int precision, char[] digits, int nDigits, int exp, boolean isNegative) { int startIndex = isNegative ? 1 : 0; if (exp > 0) { // print digits.digits. if (nDigits < exp) { mantissa = create(isNegative,exp); System.arraycopy(digits, 0, mantissa, startIndex, nDigits); Arrays.fill(mantissa, startIndex + nDigits, startIndex + exp, '0'); // Do not append ".0" for formatted floats since the user // may request that it be omitted. It is added as necessary // by the Formatter. } else { int t = Math.min(nDigits - exp, precision); mantissa = create(isNegative, exp + (t > 0 ? (t + 1) : 0)); System.arraycopy(digits, 0, mantissa, startIndex, exp); // Do not append ".0" for formatted floats since the user // may request that it be omitted. It is added as necessary // by the Formatter. if (t > 0) { mantissa[startIndex + exp] = '.'; System.arraycopy(digits, exp, mantissa, startIndex + exp + 1, t); } } } else if (exp <= 0) { int zeros = Math.max(0, Math.min(-exp, precision)); int t = Math.max(0, Math.min(nDigits, precision + exp)); // write '0' s before the significant digits if (zeros > 0) { mantissa = create(isNegative, zeros + 2 + t); mantissa[startIndex] = '0'; mantissa[startIndex+1] = '.'; Arrays.fill(mantissa, startIndex + 2, startIndex + 2 + zeros, '0'); if (t > 0) { // copy only when significant digits are within the precision System.arraycopy(digits, 0, mantissa, startIndex + 2 + zeros, t); } } else if (t > 0) { mantissa = create(isNegative, zeros + 2 + t); mantissa[startIndex] = '0'; mantissa[startIndex + 1] = '.'; // copy only when significant digits are within the precision System.arraycopy(digits, 0, mantissa, startIndex + 2, t); } else { this.mantissa = create(isNegative, 1); this.mantissa[startIndex] = '0'; } } } /** * Fills mantissa and exponent char arrays for SCIENTIFIC format. */ private void fillScientific(int precision, char[] digits, int nDigits, int exp, boolean isNegative) { int startIndex = isNegative ? 1 : 0; int t = Math.max(0, Math.min(nDigits - 1, precision)); if (t > 0) { mantissa = create(isNegative, t + 2); mantissa[startIndex] = digits[0]; mantissa[startIndex + 1] = '.'; System.arraycopy(digits, 1, mantissa, startIndex + 2, t); } else { mantissa = create(isNegative, 1); mantissa[startIndex] = digits[0]; } char expSign; int e; if (exp <= 0) { expSign = '-'; e = -exp + 1; } else { expSign = '+' ; e = exp - 1; } // decExponent has 1, 2, or 3, digits if (e <= 9) { exponent = new char[] { expSign, '0', (char) (e + '0') }; } else if (e <= 99) { exponent = new char[] { expSign, (char) (e / 10 + '0'), (char) (e % 10 + '0') }; } else { char hiExpChar = (char) (e / 100 + '0'); e %= 100; exponent = new char[] { expSign, hiExpChar, (char) (e / 10 + '0'), (char) (e % 10 + '0') }; } } }
⏎ jdk/internal/math/FormattedFloatingDecimal.java
Or download all of them as a single archive file:
File name: java.base-11.0.1-src.zip File size: 8740354 bytes Release date: 2018-11-04 Download
2020-05-29, 207549👍, 0💬
Popular Posts:
What Is wstx-asl-3.2.8.jar? wstx-asl-3.2.8.jar is JAR file for the ASL component of Woodstox 3.2.8. ...
JDK 11 jdk.crypto.ec.jmod is the JMOD file for JDK 11 Crypto EC module. JDK 11 Crypto EC module comp...
The Web Services Description Language for Java Toolkit (WSDL4J), Release 1.6.2, allows the creation,...
The Digester package lets you configure an XML -> Java object mapping module, which triggers certain...
What Is poi-scratchpad-5.2.3.jar ?poi-scratchpad-5.2.3.jar is one of the JAR files for Apache POI 5....