< prev index next >

src/java.base/share/classes/java/lang/StrictMath.java

Print this page




1118 
1119     /**
1120      * Returns the smaller of two {@code double} values.  That
1121      * is, the result is the value closer to negative infinity. If the
1122      * arguments have the same value, the result is that same
1123      * value. If either value is NaN, then the result is NaN.  Unlike
1124      * the numerical comparison operators, this method considers
1125      * negative zero to be strictly smaller than positive zero. If one
1126      * argument is positive zero and the other is negative zero, the
1127      * result is negative zero.
1128      *
1129      * @param   a   an argument.
1130      * @param   b   another argument.
1131      * @return  the smaller of {@code a} and {@code b}.
1132      */
1133     public static double min(double a, double b) {
1134         return Math.min(a, b);
1135     }
1136 
1137     /**








































































































1138      * Returns the size of an ulp of the argument.  An ulp, unit in
1139      * the last place, of a {@code double} value is the positive
1140      * distance between this floating-point value and the {@code
1141      * double} value next larger in magnitude.  Note that for non-NaN
1142      * <i>x</i>, <code>ulp(-<i>x</i>) == ulp(<i>x</i>)</code>.
1143      *
1144      * <p>Special Cases:
1145      * <ul>
1146      * <li> If the argument is NaN, then the result is NaN.
1147      * <li> If the argument is positive or negative infinity, then the
1148      * result is positive infinity.
1149      * <li> If the argument is positive or negative zero, then the result is
1150      * {@code Double.MIN_VALUE}.
1151      * <li> If the argument is &plusmn;{@code Double.MAX_VALUE}, then
1152      * the result is equal to 2<sup>971</sup>.
1153      * </ul>
1154      *
1155      * @param d the floating-point value whose ulp is to be returned
1156      * @return the size of an ulp of the argument
1157      * @author Joseph D. Darcy




1118 
1119     /**
1120      * Returns the smaller of two {@code double} values.  That
1121      * is, the result is the value closer to negative infinity. If the
1122      * arguments have the same value, the result is that same
1123      * value. If either value is NaN, then the result is NaN.  Unlike
1124      * the numerical comparison operators, this method considers
1125      * negative zero to be strictly smaller than positive zero. If one
1126      * argument is positive zero and the other is negative zero, the
1127      * result is negative zero.
1128      *
1129      * @param   a   an argument.
1130      * @param   b   another argument.
1131      * @return  the smaller of {@code a} and {@code b}.
1132      */
1133     public static double min(double a, double b) {
1134         return Math.min(a, b);
1135     }
1136 
1137     /**
1138      * Returns the fused multiply add of the three arguments; that is,
1139      * returns the exact product of the first two arguments summed
1140      * with the third argument and then rounded once to the nearest
1141      * {@code double}.
1142      *
1143      * The rounding is done using the {@linkplain
1144      * java.math.RoundingMode#HALF_EVEN round to nearest even
1145      * rounding mode}.
1146      *
1147      * In contrast, if {@code a * b + c} is evaluated as a regular
1148      * floating-point expression, two rounding errors are involved,
1149      * the first for the multiply operation, the second for the
1150      * addition operation.
1151      *
1152      * <p>Special cases:
1153      * <ul>
1154      * <li> If any argument is NaN, the result is NaN.
1155      *
1156      * <li> If one of the first two arguments is infinite and the
1157      * other is zero, the result is NaN.
1158      *
1159      * <li> If the exact product of the first two arguments is infinite
1160      * (in other words, at least one of the arguments is infinite and
1161      * the other is neither zero nor NaN) and the third argument is an
1162      * infinity of the opposite sign, the result is NaN.
1163      *
1164      * </ul>
1165      *
1166      * <p>Note that {@code fusedMac(a, 1.0, c)} returns the same
1167      * result as ({@code a + c}).  However,
1168      * {@code fusedMac(a, b, +0.0)} does <em>not</em> always return the
1169      * same result as ({@code a * b}) since
1170      * {@code fusedMac(-0.0, +0.0, +0.0)} is {@code +0.0} while
1171      * ({@code -0.0 * +0.0}) is {@code -0.0}; {@code fusedMac(a, b, -0.0)} is
1172      * equivalent to ({@code a * b}) however.
1173      *
1174      * @apiNote This method corresponds to the fusedMultiplyAdd
1175      * operation defined in IEEE 754-2008.
1176      *
1177      * @param a a value
1178      * @param b a value
1179      * @param c a value
1180      *
1181      * @return (<i>a</i>&nbsp;&times;&nbsp;<i>b</i>&nbsp;+&nbsp;<i>c</i>)
1182      * computed, as if with unlimited range and precision, and rounded
1183      * once to the nearest {@code double} value
1184      */
1185     public static double fma(double a, double b, double c) {
1186         return Math.fma(a, b, c);
1187     }
1188 
1189     /**
1190      * Returns the fused multiply add of the three arguments; that is,
1191      * returns the exact product of the first two arguments summed
1192      * with the third argument and then rounded once to the nearest
1193      * {@code float}.
1194      *
1195      * The rounding is done using the {@linkplain
1196      * java.math.RoundingMode#HALF_EVEN round to nearest even
1197      * rounding mode}.
1198      *
1199      * In contrast, if {@code a * b + c} is evaluated as a regular
1200      * floating-point expression, two rounding errors are involved,
1201      * the first for the multiply operation, the second for the
1202      * addition operation.
1203      *
1204      * <p>Special cases:
1205      * <ul>
1206      * <li> If any argument is NaN, the result is NaN.
1207      *
1208      * <li> If one of the first two arguments is infinite and the
1209      * other is zero, the result is NaN.
1210      *
1211      * <li> If the exact product of the first two arguments is infinite
1212      * (in other words, at least one of the arguments is infinite and
1213      * the other is neither zero nor NaN) and the third argument is an
1214      * infinity of the opposite sign, the result is NaN.
1215      *
1216      * </ul>
1217      *
1218      * <p>Note that {@code fma(a, 1.0f, c)} returns the same
1219      * result as ({@code a + c}).  However,
1220      * {@code fma(a, b, +0.0f)} does <em>not</em> always return the
1221      * same result as ({@code a * b}) since
1222      * {@code fma(-0.0f, +0.0f, +0.0f)} is {@code +0.0f} while
1223      * ({@code -0.0f * +0.0f}) is {@code -0.0f}; {@code fma(a, b, -0.0f)} is
1224      * equivalent to ({@code a * b}) however.
1225      *
1226      * @apiNote This method corresponds to the fusedMultiplyAdd
1227      * operation defined in IEEE 754-2008.
1228      *
1229      * @param a a value
1230      * @param b a value
1231      * @param c a value
1232      *
1233      * @return (<i>a</i>&nbsp;&times;&nbsp;<i>b</i>&nbsp;+&nbsp;<i>c</i>)
1234      * computed, as if with unlimited range and precision, and rounded
1235      * once to the nearest {@code float} value
1236      */
1237     public static float fma(float a, float b, float c) {
1238         return Math.fma(a, b, c);
1239     }
1240 
1241     /**
1242      * Returns the size of an ulp of the argument.  An ulp, unit in
1243      * the last place, of a {@code double} value is the positive
1244      * distance between this floating-point value and the {@code
1245      * double} value next larger in magnitude.  Note that for non-NaN
1246      * <i>x</i>, <code>ulp(-<i>x</i>) == ulp(<i>x</i>)</code>.
1247      *
1248      * <p>Special Cases:
1249      * <ul>
1250      * <li> If the argument is NaN, then the result is NaN.
1251      * <li> If the argument is positive or negative infinity, then the
1252      * result is positive infinity.
1253      * <li> If the argument is positive or negative zero, then the result is
1254      * {@code Double.MIN_VALUE}.
1255      * <li> If the argument is &plusmn;{@code Double.MAX_VALUE}, then
1256      * the result is equal to 2<sup>971</sup>.
1257      * </ul>
1258      *
1259      * @param d the floating-point value whose ulp is to be returned
1260      * @return the size of an ulp of the argument
1261      * @author Joseph D. Darcy


< prev index next >