mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8240632: Note differences between IEEE 754-2019 math lib special cases and java.lang.Math
Reviewed-by: bpb
This commit is contained in:
parent
ace8f94616
commit
2fd8ed024b
5 changed files with 264 additions and 21 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -74,6 +74,15 @@ import jdk.internal.vm.annotation.IntrinsicCandidate;
|
|||
* occurs only with a specific minimum or maximum value and
|
||||
* should be checked against the minimum or maximum as appropriate.
|
||||
*
|
||||
* <h2><a id=Ieee754RecommendedOps>IEEE 754 Recommended
|
||||
* Operations</a></h2>
|
||||
*
|
||||
* The {@link java.lang.Math Math} class discusses how the shared
|
||||
* quality of implementation criteria for selected {@code Math} and
|
||||
* {@code StrictMath} methods <a
|
||||
* href="Math.html#Ieee754RecommendedOps">relate to the IEEE 754
|
||||
* recommended operations</a>.
|
||||
*
|
||||
* @author Joseph D. Darcy
|
||||
* @since 1.3
|
||||
*/
|
||||
|
@ -126,7 +135,9 @@ public final class StrictMath {
|
|||
/**
|
||||
* Returns the trigonometric cosine of an angle. Special cases:
|
||||
* <ul><li>If the argument is NaN or an infinity, then the
|
||||
* result is NaN.</ul>
|
||||
* result is NaN.
|
||||
* <li>If the argument is zero, then the result is {@code 1.0}.
|
||||
* </ul>
|
||||
*
|
||||
* @param a an angle, in radians.
|
||||
* @return the cosine of the argument.
|
||||
|
@ -162,7 +173,9 @@ public final class StrictMath {
|
|||
* Returns the arc cosine of a value; the returned angle is in the
|
||||
* range 0.0 through <i>pi</i>. Special case:
|
||||
* <ul><li>If the argument is NaN or its absolute value is greater
|
||||
* than 1, then the result is NaN.</ul>
|
||||
* than 1, then the result is NaN.
|
||||
* <li>If the argument is {@code 1.0}, the result is positive zero.
|
||||
* </ul>
|
||||
*
|
||||
* @param a the value whose arc cosine is to be returned.
|
||||
* @return the arc cosine of the argument.
|
||||
|
@ -174,7 +187,11 @@ public final class StrictMath {
|
|||
* range -<i>pi</i>/2 through <i>pi</i>/2. Special cases:
|
||||
* <ul><li>If the argument is NaN, then the result is NaN.
|
||||
* <li>If the argument is zero, then the result is a zero with the
|
||||
* same sign as the argument.</ul>
|
||||
* same sign as the argument.
|
||||
* <li>If the argument is {@linkplain Double#isInfinite infinite},
|
||||
* then the result is the closest value to <i>pi</i>/2 with the
|
||||
* same sign as the input.
|
||||
* </ul>
|
||||
*
|
||||
* @param a the value whose arc tangent is to be returned.
|
||||
* @return the arc tangent of the argument.
|
||||
|
@ -220,7 +237,9 @@ public final class StrictMath {
|
|||
* <li>If the argument is positive infinity, then the result is
|
||||
* positive infinity.
|
||||
* <li>If the argument is negative infinity, then the result is
|
||||
* positive zero.</ul>
|
||||
* positive zero.
|
||||
* <li>If the argument is zero, then the result is {@code 1.0}.
|
||||
* </ul>
|
||||
*
|
||||
* @param a the exponent to raise <i>e</i> to.
|
||||
* @return the value <i>e</i><sup>{@code a}</sup>,
|
||||
|
@ -238,7 +257,10 @@ public final class StrictMath {
|
|||
* <li>If the argument is positive infinity, then the result is
|
||||
* positive infinity.
|
||||
* <li>If the argument is positive zero or negative zero, then the
|
||||
* result is negative infinity.</ul>
|
||||
* result is negative infinity.
|
||||
* <li>If the argument is {@code 1.0}, then the result is positive
|
||||
* zero.
|
||||
* </ul>
|
||||
*
|
||||
* @param a a value
|
||||
* @return the value ln {@code a}, the natural logarithm of
|
||||
|
@ -256,8 +278,10 @@ public final class StrictMath {
|
|||
* positive infinity.
|
||||
* <li>If the argument is positive zero or negative zero, then the
|
||||
* result is negative infinity.
|
||||
* <li> If the argument is equal to 10<sup><i>n</i></sup> for
|
||||
* integer <i>n</i>, then the result is <i>n</i>.
|
||||
* <li>If the argument is equal to 10<sup><i>n</i></sup> for
|
||||
* integer <i>n</i>, then the result is <i>n</i>. In particular,
|
||||
* if the argument is {@code 1.0} (10<sup>0</sup>), then the
|
||||
* result is positive zero.
|
||||
* </ul>
|
||||
*
|
||||
* @param a a value
|
||||
|
@ -517,6 +541,15 @@ public final class StrictMath {
|
|||
* <li>If both arguments are negative infinity, then the result is the
|
||||
* {@code double} value closest to -3*<i>pi</i>/4.</ul>
|
||||
*
|
||||
* @apiNote
|
||||
* For <i>y</i> with a positive sign and finite nonzero
|
||||
* <i>x</i>, the exact mathematical value of {@code atan2} is
|
||||
* equal to:
|
||||
* <ul>
|
||||
* <li>If <i>x</i> {@literal >} 0, atan(abs(<i>y</i>/<i>x</i>))
|
||||
* <li>If <i>x</i> {@literal <} 0, π - atan(abs(<i>y</i>/<i>x</i>))
|
||||
* </ul>
|
||||
*
|
||||
* @param y the ordinate coordinate
|
||||
* @param x the abscissa coordinate
|
||||
* @return the <i>theta</i> component of the point
|
||||
|
@ -642,6 +675,16 @@ public final class StrictMath {
|
|||
* method if and only if the result of applying the method to the
|
||||
* value is equal to the value.)
|
||||
*
|
||||
* @apiNote
|
||||
* The special cases definitions of this method differ from the
|
||||
* special case definitions of the IEEE 754 recommended {@code
|
||||
* pow} operation for ±{@code 1.0} raised to an infinite
|
||||
* power. This method treats such cases as indeterminate and
|
||||
* specifies a NaN is returned. The IEEE 754 specification treats
|
||||
* the infinite power as a large integer (large-magnitude
|
||||
* floating-point numbers are numerically integers, specifically
|
||||
* even integers) and therefore specifies {@code 1.0} be returned.
|
||||
*
|
||||
* @param a base.
|
||||
* @param b the exponent.
|
||||
* @return the value {@code a}<sup>{@code b}</sup>.
|
||||
|
@ -1681,6 +1724,7 @@ public final class StrictMath {
|
|||
* <li> If either argument is NaN and neither argument is infinite,
|
||||
* then the result is NaN.
|
||||
*
|
||||
* <li> If both arguments are zero, the result is positive zero.
|
||||
* </ul>
|
||||
*
|
||||
* @param x a value
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue