1336 // if the signs are different and modulo not zero, adjust result 1337 if ((x ^ y) < 0 && mod != 0) { 1338 mod += y; 1339 } 1340 return mod; 1341 } 1342 1343 /** 1344 * Returns the absolute value of an {@code int} value. 1345 * If the argument is not negative, the argument is returned. 1346 * If the argument is negative, the negation of the argument is returned. 1347 * 1348 * <p>Note that if the argument is equal to the value of 1349 * {@link Integer#MIN_VALUE}, the most negative representable 1350 * {@code int} value, the result is that same value, which is 1351 * negative. 1352 * 1353 * @param a the argument whose absolute value is to be determined 1354 * @return the absolute value of the argument. 1355 */ 1356 public static int abs(int a) { 1357 return (a < 0) ? -a : a; 1358 } 1359 1360 /** 1361 * Returns the absolute value of a {@code long} value. 1362 * If the argument is not negative, the argument is returned. 1363 * If the argument is negative, the negation of the argument is returned. 1364 * 1365 * <p>Note that if the argument is equal to the value of 1366 * {@link Long#MIN_VALUE}, the most negative representable 1367 * {@code long} value, the result is that same value, which 1368 * is negative. 1369 * 1370 * @param a the argument whose absolute value is to be determined 1371 * @return the absolute value of the argument. 1372 */ 1373 public static long abs(long a) { 1374 return (a < 0) ? -a : a; 1375 } 1376 1377 /** 1378 * Returns the absolute value of a {@code float} value. 1379 * If the argument is not negative, the argument is returned. 1380 * If the argument is negative, the negation of the argument is returned. 1381 * Special cases: 1382 * <ul><li>If the argument is positive zero or negative zero, the 1383 * result is positive zero. 1384 * <li>If the argument is infinite, the result is positive infinity. 1385 * <li>If the argument is NaN, the result is NaN.</ul> 1386 * 1387 * @apiNote As implied by the above, one valid implementation of 1388 * this method is given by the expression below which computes a 1389 * {@code float} with the same exponent and significand as the 1390 * argument but with a guaranteed zero sign bit indicating a 1391 * positive value:<br> 1392 * {@code Float.intBitsToFloat(0x7fffffff & Float.floatToRawIntBits(a))} 1393 * 1394 * @param a the argument whose absolute value is to be determined 1395 * @return the absolute value of the argument. 1396 */ 1397 public static float abs(float a) { 1398 return (a <= 0.0F) ? 0.0F - a : a; 1399 } 1400 1401 /** 1402 * Returns the absolute value of a {@code double} value. 1403 * If the argument is not negative, the argument is returned. 1404 * If the argument is negative, the negation of the argument is returned. 1405 * Special cases: 1406 * <ul><li>If the argument is positive zero or negative zero, the result 1407 * is positive zero. 1408 * <li>If the argument is infinite, the result is positive infinity. 1409 * <li>If the argument is NaN, the result is NaN.</ul> 1410 * 1411 * @apiNote As implied by the above, one valid implementation of 1412 * this method is given by the expression below which computes a 1413 * {@code double} with the same exponent and significand as the 1414 * argument but with a guaranteed zero sign bit indicating a 1415 * positive value:<br> 1416 * {@code Double.longBitsToDouble((Double.doubleToRawLongBits(a)<<1)>>>1)} | 1336 // if the signs are different and modulo not zero, adjust result 1337 if ((x ^ y) < 0 && mod != 0) { 1338 mod += y; 1339 } 1340 return mod; 1341 } 1342 1343 /** 1344 * Returns the absolute value of an {@code int} value. 1345 * If the argument is not negative, the argument is returned. 1346 * If the argument is negative, the negation of the argument is returned. 1347 * 1348 * <p>Note that if the argument is equal to the value of 1349 * {@link Integer#MIN_VALUE}, the most negative representable 1350 * {@code int} value, the result is that same value, which is 1351 * negative. 1352 * 1353 * @param a the argument whose absolute value is to be determined 1354 * @return the absolute value of the argument. 1355 */ 1356 @HotSpotIntrinsicCandidate 1357 public static int abs(int a) { 1358 return (a < 0) ? -a : a; 1359 } 1360 1361 /** 1362 * Returns the absolute value of a {@code long} value. 1363 * If the argument is not negative, the argument is returned. 1364 * If the argument is negative, the negation of the argument is returned. 1365 * 1366 * <p>Note that if the argument is equal to the value of 1367 * {@link Long#MIN_VALUE}, the most negative representable 1368 * {@code long} value, the result is that same value, which 1369 * is negative. 1370 * 1371 * @param a the argument whose absolute value is to be determined 1372 * @return the absolute value of the argument. 1373 */ 1374 @HotSpotIntrinsicCandidate 1375 public static long abs(long a) { 1376 return (a < 0) ? -a : a; 1377 } 1378 1379 /** 1380 * Returns the absolute value of a {@code float} value. 1381 * If the argument is not negative, the argument is returned. 1382 * If the argument is negative, the negation of the argument is returned. 1383 * Special cases: 1384 * <ul><li>If the argument is positive zero or negative zero, the 1385 * result is positive zero. 1386 * <li>If the argument is infinite, the result is positive infinity. 1387 * <li>If the argument is NaN, the result is NaN.</ul> 1388 * 1389 * @apiNote As implied by the above, one valid implementation of 1390 * this method is given by the expression below which computes a 1391 * {@code float} with the same exponent and significand as the 1392 * argument but with a guaranteed zero sign bit indicating a 1393 * positive value:<br> 1394 * {@code Float.intBitsToFloat(0x7fffffff & Float.floatToRawIntBits(a))} 1395 * 1396 * @param a the argument whose absolute value is to be determined 1397 * @return the absolute value of the argument. 1398 */ 1399 @HotSpotIntrinsicCandidate 1400 public static float abs(float a) { 1401 return (a <= 0.0F) ? 0.0F - a : a; 1402 } 1403 1404 /** 1405 * Returns the absolute value of a {@code double} value. 1406 * If the argument is not negative, the argument is returned. 1407 * If the argument is negative, the negation of the argument is returned. 1408 * Special cases: 1409 * <ul><li>If the argument is positive zero or negative zero, the result 1410 * is positive zero. 1411 * <li>If the argument is infinite, the result is positive infinity. 1412 * <li>If the argument is NaN, the result is NaN.</ul> 1413 * 1414 * @apiNote As implied by the above, one valid implementation of 1415 * this method is given by the expression below which computes a 1416 * {@code double} with the same exponent and significand as the 1417 * argument but with a guaranteed zero sign bit indicating a 1418 * positive value:<br> 1419 * {@code Double.longBitsToDouble((Double.doubleToRawLongBits(a)<<1)>>>1)} |