Java Numerics: Main
Java Numerics
[Numerics Working Group] [Meetings] [Proposals] [Benchmarks] [Libraries] [Tools] [Papers] [Links]

The JavaNumerics page provides a focal point for information on numerical computing in Java. This is an activity of the Java Grande Forum Numerics Working Group, chaired by Ron Boisvert and Roldan Pozo.

Note. Some of the links below will take you away from NIST webspace. We are providing these links because we think they will be of interest to you; however, the views expressed and the decisions reported do not necessarily connote NIST agreement with, or endorsement of them. Further, NIST does not endorse any commercial products that may be mentioned. Please address comments about this page to We conform to the NIST Privacy Policy. Java is a registered trademark of Sun Microsystems, Inc.

News   Java Specification Request for Floating-Point Extensions has been withdrawn due to difficulties in setting up an expert group.

Java Specification Request for MultiArrays under consideration. (WITHDRAWN)


The goals of the Numerics Working Group of the Java Grande Forum are (1) to assess the suitability of Java for numerical computation, (2) to work towards community consensus on actions which can be taken to overcome deficiencies of the language and its run-time environment, and (3) to encourage the development of APIs for core mathematical operations. The Group hosts open meetings and other forums to discuss these issues.



Proposed APIs for Numerical Computing




Proposals   Language Extensions

Standard Classes for Numerical Computing

Benchmarks   Numeric
  • SciMark is a composite benchmark comprising of FFT kernels, finite-difference stencils, Monte Carlo simulations, sparse matrix computations, and direct (LU) factorization.

  • Java Grande Benchmark Suite is a collection of low-level kernels, and applications for scientific and technical computing.

  • Java Linpack Benchmark is a translation of the popular Linpack benchmark, originally written in Fortran. It measures the performance solving a 100x100 dense linear system.

  • Java matrix benchmark is a tool for evaluating the performance and stability of java matrix libraries.


Libraries   General Numerics 

  • Apfloat is a arbitrary precision floating-point arithmetic package. 
  • ArciMath BigDecimal is an extension of java.math.BigDecimal based on IBM's Java Specification Request. 
  • Colt is a free Java toolkit containing data structures and utilities intended for high performance computing. 
  • Commons-Math The Jakarta Mathematics Library is is a library of lightweight, self-contained mathematics and statistics components addressing the most common problems not available in the Java programming language. 
  • Drej, an open-source Java library for linear and non-linear least-squares regression and regularized least-squares classification. 
  • A translation of the ELEFUNT Elementary Functions Testing Package has been ported to Java. The collection also contains extensions to java.lang.Math and new classes for numeric output formatting.
  • IBM's AlphaWorks contains several tools of interest, including
  • Java Numerical Toolkit (JNT) 
  • Java Ultimate Math Package, a framework for arbitrary precision computations.
  • The Java3D effort produced a matrix package for use in graphics. 
  • JMSL, a collection of mathematical, statistical and charting classes, written in 100% Java, marketed by Visual Numeric, Inc. Includes linear algebra, zero finding, splines, ordinary differential equations, linear programming, nonlinear optimization, FFTs, special functions, regression, ANOVA, ARMA, Kalman filters.
  • JLargeArrays, a pure Java library of one-dimensional numeric arrays that can store up to 2^63 elements.
  • JSci, a set of Java packages for linear algebra, statistics, wavelets. Includes chart/graph components and a partial MathML DOM implementation.
  • jScience contains packages for numerical linear algebra, for computing with units (e.g., kg., sec.), and other utility operations.
  • Jspline+ is a spline approximation library for Java developed at the Institute of Computational Mathematics and Mathematical Geophysics (RAS) in Novosibirsk. It contains classes for univariate and multivariate spline approximation on scattered meshes, as well as core matrix and linear system solution classes.
  • JTransforms, The first open source, multithreaded FFT library in pure Java.
  • Koalog Constraint Solver is a commercial Java library for solving combinatorial optimization problems using Constraint Programming or Local Search. 
  • Least Squares Software markets the jCrunch[tm] class libraries for numerical computing. 
  • mpjava is a Java implementation of David Bailey's Fortran-based multiprecision package. The package performs multi precision floating point arithmetic with arbitrary precision level. It takes advantage of Java's inheritance facility to provide smooth transition from primitive arithmetic types. 
  • netlib has a small collection of Java numerical classes. 
  • A Numerical Library in Java for Scientists and Engineers, a book published by CRC Press, contains a CD-ROM with translation into Java of the library NUMAL (NUMerical procedures in Algol 60). 
  • ojAlgo, an open source pure Java mathematics package containing matrices, complex numbers, and optimization, with links to Jama, Jampack, and Colt. . 
  • OpsResearch has developed a freeware library of more than 450 Operations Research objects, including packages for linear programming, graph-theoretic problems, linear algebra, nonlinear equations, probability and geometry. 
  • The Orbital library is a class library providing object-oriented representations and algorithms for logic, mathematics and artificial intelligence. It includes theorem proving, computer algebra, search and planning, as well as machine learning algorithms.

  • A set of Java classes from the book Ordinary and Partial Differential Equation Routines in C, C++, Fortran, Java, Maple and Matlab can be obtained from author William Schiesser.

  • Parallel Colt, An attempt to implement fully multithreaded version of Colt. Still in early development stage.  
  • RngPack, a pseudorandom number generator library. 
  • SSJ, Stochastic Simulation in Java, provides facilities for generating random variates, computing measures related to probability distributions, performing goodness-of-fit tests, applying quasi-Monte Carlo methods, collecting elementary statistics, and programming discrete-event simulations. 
  • SuanShu, a large collection of Java classes for basic numerical analysis, statistics, and optimization. 

Linear Algebra, BLAS 

  • JAMA (JAva MAtrix package) provides factorizatons (LU, Cholesky, QR, SVD) and symmetric/non-symmetric eigenvalue problems. Jama is a proposed interface standard for dense linear algebra computations. The package has been relesed for comment by the MathWorks and NIST.  
  • Jampack (JAva Matrix PACKage) is a collection of cooperating Java classes for numerical linear algebra. Jampack fully supports complex matrices. Developed by Pete Stewart of the University of Maryland and NIST, Jampack is preliminary and incomplete, but is being released to see if there is sufficient interest to continue its development.

  • Java Lapack is available from netlib at the University of Tennessee at Knoxville. This code was automatically translated from the Fortran version of the well-know LAPACK linear algebra package using f2j.
  • la4j is a pure Java library for linear algebra that uses many structural and object oriented patterns from the classic GoF book. 
  • The Linear Algebra component of the Java Numerical Toolkit (JNT) provides LU, QR factorizations, optimized BLAS, and sparse matrices. 
  • MTJ is designed to be used as a library for developing numerical applications, both for small and large scale computations. The library is based on BLAS and LAPACK for its dense and structured sparse computations, and on the Templates project for unstructured sparse operations.  
  • OpsResearch has developed a freeware library of more than 450 Operations Research objects which include a complete implementation of the BLAS in both serial and parallel versions. 
  • The OwlPack: a general purpose linear algebra library in polymorphic, object-oriented style Java, based on the standard Fortran LINPACK library. Not meant for high-performance applications. Rather, serves an exercise in writing scientific programs in Java in an elegant, object-oriented style, given sufficient compiler technologies to ameliorate the performance problems 
  • Steve Verrill developed one of the first Java linear algebra packages from the Fortran BLAS and LINPACK. 
  • Universal Java Matrix Package (UJMP) is an open source Java library which provides sparse and dense matrix classes, as well as a large number of calculations for linear algebra like matrix multiplication or matrix inverse. UJMP uses multiple threads for calculations for improved performance on modern hardware. Also supported are visualization methods, import/export filters for various file formats, and interfaces to Matlab, Octave and R. 
  • The vecmath package in the Java 3D(TM) API provides general matrix and vector classes (GMatrix, GVector) along with its specialized matrix classes for graphics applications.
  • EJML is a linear algebra library for manipulating dense matrices. Its design goals are; 1) to be as computationally efficient as possible for both small and large matrices, and 2) to be accessible to both novices and experts. These goals are accomplished by dynamically selecting the best algorithms to use at runtime and by designing a clean API. EJML is written in 100% Java.

Tools / Utilities   Formatted I/O for Java 
  • Henrik Bengtsson's Java printf(), package provides C-like formatted output. 
  • Lava Rocks, by Charlton D. Rose, provides text parsing classes for scientific I/O, including an implementation of printf().
  • JNT NumericReader() class: readapts to correctly parse floating point numbers in scientific notation. 
Multidimensional Arrays  Extended Languages for Java 
  • Robert Tolksdorf keeps a list of langauages (compilers, interpreters, preprocessors, assemblers) for the Java Virtual Machine (JVM). 
  • cj, a Java compiler that implements complex as a primitive type. 
  • HPJava, is an environment for scientific and parallel programming using Java. It is an extension of Java that incorporates data parallel programming features similar to those in HPF. It also includes Fortran-style multiarrays.
  • Jython, an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform.
  • Timber is a static compiler for Spar/Java, a superset of Java with constructs for high-performance computing. The additions include support for data parallelism and task parallelism, tuples, multi-dimensional arrays, generic classes and interfaces through templates, complex numbers, and subscript operator overloading.
  • zeta, a Java compiler that admits infix notation for operations on complex variables 
Linking Java to Other Technical Computing Packages 
  • JavaMath is free software to enable mathematical programs in Java to use the computational capabilities of existing compute engines, either stand-alone applications or Web-based client-server applications.
  • J/Link for Mathematica provides tools to call Java from Mathematica and Mathematica from Java.
Scientific Visualization  
  • Java 3D(TM) API is a set of classes for writing three-dimensional graphics applications.
  • The NCSA Horizon Image Data Browser Package is a toolkit for visualizing multi-dimensional arrays in a format-independent way. 
  • Visual Numeric's JWAVE provides a set of Netscape IFC based Java components for data visualization and numerics, using a PV-WAVE server. 
  • The Scientific Graphics Toolkit of NOAA's NOAAServer Project aims to provide Java classes to produce publication quality, object oriented graphics of scientific data. Features include user settable or automatically scaled axes, automatically self-scaling time axes, labels as movable, customizable objects, and automatic generation of legends.
  • VisAD, from the SSEC Visualization Project, is a Java class library for interactive and collaborative visualization and analysis of numerical data. 

Related Papers, Talks  

From flop to megaflops: Java for technical computing
Jos‰ E. Moreira, Samuel P. Midkiff and Manish Gupta
ACM Transactions on Programming Languages and Systems
Volume 22 , Issue 2 (2000), pp. 265-295.

Just when you thought your little language was safe: `Expression Templates' in Java
Todd L. Veldhuizen
Indiana University CS Technical Report Numer 539, July 2000

Digital Journey, Work of the Java Grande Forum featured in video-taped interviews with John Gage at JavaOne 2000.

Towards a Science of Reliable Programming
Bill Joy
ACM Java Grande Conference, June 1999. 
Slides in Powerpoint

Efficient Support for Complex Numbers in Java
Peng Wu, Sam Midkiff, Jose Moreira and Manish Gupta
ACM Java Grande Conference, June 1999. 
Postscript     PDF     Slides in PDF

An Evaluation of Java for Numerical Computing
B.L. Blount and S. Chatterjee
January 1999. 

Numerical Performance in Java
Jon Meyer
Working Paper, January 1999. 

Is Java ready for computational science?
Michael Philippsen
Euro-PDS'98, the 2nd European Parallel and Distributed Systems Conference, July 1998. 

Floating-Point Performance in Java
Marc Snir, Jose Moreira, Manish Gupta, Lois Haibt and Sam Midkiff
Slides from presentation at the May 1998 Java Grande Forum. 

Developing numerical libraries in Java
Ronald F. Boisvert, Jack J. Dongarra, Roldan Pozo, Karin A. Remington, and G. W. Stewart
ACM 1998 Workshop on Java for High-Performance Network Computing, March 1998. 
Postscript     PDF 

How Java's Floating-Point Hurts Everyone Everywhere
W. Kahan and Joseph D. Darcy
Slides from presentation at the ACM 1998 Workshop on Java for High-Performance Network Computing, March 1998. 

A Proposal for RealJava
Jerome Coonen
July 1997 

Related Links  

Borneo, a Java dialect with true support for the IEEE 754 floating-point standard
Joseph D. Darcy 

validlab's Java numerics page
David Hough 

List of Java Compilers and Virtual Machines
Marco Schmidt 

Index of Scientific Java resources on the Web 

Java at Sun
Sun Microsystems 

Java Community Process
Sun Microsystems 

Other NIST Projects Related to Java 

Moderated by Roldan Pozo and Ron Boisvert. Last update: 25 June 2013

This resource is sponsored by the Mathematical and Computational Sciences Division of the NIST Information Technology Laboratory. Please address comments about this page to