Java StrictMath Class
Last modified: April 13, 2025
The java.lang.StrictMath
class provides methods for performing basic
numeric operations with strict floating-point precision. Unlike Math
,
StrictMath
guarantees bit-for-bit identical results across all
platforms. This makes it ideal for applications requiring reproducible results.
All methods in StrictMath
are static and include trigonometric,
exponential, logarithmic, and other common mathematical functions. The class
ensures platform independence by using algorithms from the well-known
Freely Distributable Math Library (fdlibm).
StrictMath Class Methods
The StrictMath
class contains over 70 methods for mathematical
operations. These include basic arithmetic, trigonometry, exponents, rounding,
and special functions. All methods are static and work with primitive numeric
types.
public final class StrictMath { public static double sin(double a) {...} public static double cos(double a) {...} public static double tan(double a) {...} public static double exp(double a) {...} public static double log(double a) {...} public static double sqrt(double a) {...} public static double pow(double a, double b) {...} public static int abs(int a) {...} public static double ceil(double a) {...} public static double floor(double a) {...} // ... and many more }
The code above shows a subset of methods available in StrictMath
.
These methods provide mathematical operations with strict floating-point
semantics, ensuring consistent results across different platforms.
Basic Arithmetic Operations
StrictMath
provides methods for basic arithmetic operations like
absolute value, maximum, minimum, and signum. These methods work with various
primitive types and ensure consistent results across platforms.
package com.zetcode; public class Main { public static void main(String[] args) { // Absolute value int absInt = StrictMath.abs(-10); double absDouble = StrictMath.abs(-3.14); // Maximum and minimum double max = StrictMath.max(5.6, 9.2); double min = StrictMath.min(5.6, 9.2); // Signum function double signum = StrictMath.signum(-25.5); System.out.println("Absolute int: " + absInt); System.out.println("Absolute double: " + absDouble); System.out.println("Maximum: " + max); System.out.println("Minimum: " + min); System.out.println("Signum: " + signum); } }
This example demonstrates basic arithmetic operations with StrictMath
.
The abs
method returns absolute values, max
and
min
compare values, and signum
returns the sign of
a number (-1, 0, or 1). All operations are performed with strict precision.
Trigonometric Functions
StrictMath
provides standard trigonometric functions including
sine, cosine, tangent, and their inverses. These methods take angles in radians
and return precise results according to strict floating-point rules.
package com.zetcode; public class Main { public static void main(String[] args) { double angle = StrictMath.PI / 4; // 45 degrees in radians // Basic trigonometric functions double sinValue = StrictMath.sin(angle); double cosValue = StrictMath.cos(angle); double tanValue = StrictMath.tan(angle); // Inverse trigonometric functions double asinValue = StrictMath.asin(sinValue); double acosValue = StrictMath.acos(cosValue); double atanValue = StrictMath.atan(tanValue); System.out.println("Sine: " + sinValue); System.out.println("Cosine: " + cosValue); System.out.println("Tangent: " + tanValue); System.out.println("Arcsine: " + asinValue); System.out.println("Arccosine: " + acosValue); System.out.println("Arctangent: " + atanValue); } }
This example shows trigonometric operations with StrictMath
. We
calculate sine, cosine, and tangent of a 45-degree angle (π/4 radians), then
verify the results using inverse functions. The precision is guaranteed to be
consistent across all platforms.
Exponential and Logarithmic Functions
StrictMath
includes methods for exponential and logarithmic
calculations. These include natural logarithm, base-10 logarithm, exponential
function, and power operations. All methods maintain strict floating-point
semantics.
package com.zetcode; public class Main { public static void main(String[] args) { double value = 2.5; // Exponential and logarithmic functions double exp = StrictMath.exp(value); double log = StrictMath.log(value); double log10 = StrictMath.log10(value); // Power functions double pow = StrictMath.pow(value, 3); double sqrt = StrictMath.sqrt(value); System.out.println("exp(" + value + "): " + exp); System.out.println("ln(" + value + "): " + log); System.out.println("log10(" + value + "): " + log10); System.out.println(value + "^3: " + pow); System.out.println("sqrt(" + value + "): " + sqrt); } }
This example demonstrates exponential and logarithmic functions. We calculate
e2.5, natural log, base-10 log, 2.53, and square root
of 2.5. All operations are performed with strict floating-point precision
guaranteed by StrictMath
.
Rounding and Remainder Operations
StrictMath
provides several methods for rounding numbers and
calculating remainders. These include ceiling, floor, round, and IEEE remainder
operations. Each method follows strict floating-point rules.
package com.zetcode; public class Main { public static void main(String[] args) { double num1 = 3.7; double num2 = -2.3; // Rounding operations double ceil1 = StrictMath.ceil(num1); double floor1 = StrictMath.floor(num1); long round1 = StrictMath.round(num1); double ceil2 = StrictMath.ceil(num2); double floor2 = StrictMath.floor(num2); long round2 = StrictMath.round(num2); // Remainder operation double remainder = StrictMath.IEEEremainder(10, 3); System.out.println("Ceiling of " + num1 + ": " + ceil1); System.out.println("Floor of " + num1 + ": " + floor1); System.out.println("Round of " + num1 + ": " + round1); System.out.println("Ceiling of " + num2 + ": " + ceil2); System.out.println("Floor of " + num2 + ": " + floor2); System.out.println("Round of " + num2 + ": " + round2); System.out.println("IEEE remainder of 10/3: " + remainder); } }
This example shows rounding operations with StrictMath
.
ceil
rounds up, floor
rounds down, and
round
rounds to nearest integer. The IEEEremainder
method computes the remainder according to IEEE 754 standard.
Hyperbolic Functions
StrictMath
includes hyperbolic trigonometric functions:
hyperbolic sine, cosine, and tangent. These are useful in various engineering
and physics applications and maintain strict floating-point precision.
package com.zetcode; public class Main { public static void main(String[] args) { double x = 1.5; // Hyperbolic functions double sinh = StrictMath.sinh(x); double cosh = StrictMath.cosh(x); double tanh = StrictMath.tanh(x); System.out.println("Hyperbolic sine: " + sinh); System.out.println("Hyperbolic cosine: " + cosh); System.out.println("Hyperbolic tangent: " + tanh); // Verify identity: cosh^2(x) - sinh^2(x) = 1 double identity = cosh * cosh - sinh * sinh; System.out.println("cosh^2(x) - sinh^2(x) = " + identity); } }
This example demonstrates hyperbolic functions in StrictMath
.
We calculate hyperbolic sine, cosine, and tangent of 1.5, then verify the
fundamental identity cosh²(x) - sinh²(x) = 1. The results show the precision
of StrictMath
operations.
Angular Conversion
StrictMath
provides methods for converting between degrees and
radians. These conversions are essential when working with trigonometric
functions that require angles in radians.
package com.zetcode; public class Main { public static void main(String[] args) { double degrees = 45.0; double radians = StrictMath.toRadians(degrees); System.out.println(degrees + " degrees = " + radians + " radians"); // Convert back to degrees double backToDegrees = StrictMath.toDegrees(radians); System.out.println(radians + " radians = " + backToDegrees + " degrees"); // Calculate sin of 45 degrees double sin45 = StrictMath.sin(radians); System.out.println("sin(45°) = " + sin45); } }
This example shows angle conversion between degrees and radians using
StrictMath
. We convert 45 degrees to radians, then back to
degrees, and finally calculate the sine of 45 degrees by first converting
to radians. The precision is maintained throughout all conversions.
Random Number Generation
StrictMath
includes a random number generator method that
produces pseudorandom numbers with strict floating-point semantics. The
numbers are uniformly distributed between 0.0 (inclusive) and 1.0 (exclusive).
package com.zetcode; public class Main { public static void main(String[] args) { // Generate 5 random numbers System.out.println("Random numbers:"); for (int i = 0; i < 5; i++) { System.out.println(StrictMath.random()); } // Generate random integer between 1 and 100 int min = 1; int max = 100; int randomInt = min + (int)(StrictMath.random() * ((max - min) + 1)); System.out.println("Random integer between " + min + " and " + max + ": " + randomInt); } }
This example demonstrates random number generation with StrictMath
.
We first generate five random doubles between 0.0 and 1.0, then show how to
generate a random integer in a specific range. The results are reproducible
across platforms due to strict floating-point rules.
Source
Java StrictMath Class Documentation
In this article, we've covered the essential methods of the Java StrictMath class with practical examples. Understanding these methods is important for applications requiring strict floating-point precision and reproducibility.
Author
List all Java tutorials.