Java Specification Request for
has been withdrawn due to difficulties in setting up an expert group.
Java Specification Request for
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
Workshop on Java in Computational Science,
held in conjunctions with the
International Conference on Computational Science 2003 (ICCS 2003),
Melbourne, Australia (June 2-4, 2003).
5th International Workshop on Java for Parallel and Distributed Computing,
held in conjunction with IPDPS 2003,
Nice, France (April 22-26, 2003)
Joint ACM Java Grande - ISCOPE 2002 Conference,
Seattle, WA, USA (November 3-5, 2002)
Java Virtual Machine Research and Technology Symposium 2002 (JVM'02),
San Francisco, CA, USA (August 1-2, 2002)
4th International Workshop on Java for Parallel and Distributed Computing,
held in conjunction with IPDPS 2002, Fort Lauderdale,
Florida, USA (April 15-19, 2002)
- Workshop onJava in High
Performance Computing at HPCN Eurpe 2001 Conference, Amsterdam, The Netherlands
(June 25 - 27, 2001)
- Third Workshop on Java
for High Performance Computing in conjunction with ICS'01, Sorrento, Italy
(June 16-21, 2001).
- Joint ACM Java Grande -- ISCOPE
Conference in San Francisco Bay Area (June 2-4, 2001). Includes meetings of the
Java Grande Numerics Working Group on June 4.
- Shortcourse on Java for High Performance Computing
at the Tenth SIAM Conference on
Parallel processing for Scientific
Computing in Portsmouth, Virginia, USA (March 11, 2001).
- Euro-Par 2000
Workshop on Object-Oriented Architectures, Tools and Applications
in Munich, Germany (August 29 - September 1, 2000).
- Dagsthul Seminar
on High Performance Computing in Java in Dagsthul, Germany
(August 20 - August 25, 2000).
- Minisymposium on The Role
of Java in Scientific Computing at the SIAM
Annual Meeting in Puerto Rico (July 10-14, 2000).
- ACM Java Grande
Conference in San Francisco (June 2000). Included meetings of the Java
Grande Numerics Working Group on June 5.
- Second Workshop
on Java for High Performance Computing at ICS 2000 in Santa Fe, NM
(May 8-11, 2000)
on Java for High Performance Computing at HPCN-Europe 2000 in Amsterdam
(May 8-10, 2000)
- Panel at ISCOPE99 (December 1999)
- Panel at SC'99 (November 1999)
- Java for Computational Science and Engineering Minisymposium at
International Congress on Industrial and Applied Mathematics (July 1999)
- Tutorial & Workshop on
Java for High-Performance Computing at the 1999 ACM International
Conference on Supercomputing (June 1999)
- ACM Java Grande
Conference (June 1999)
- International Workshop on Java for Parallel and Distributed Computing (April 1999)
- Panel at SC'98 in Orlando (November 1998)
- First UK Workshop on Java for
High Performance Network Computing (September 1998)
- ACM Workshop on Java
for High-Performance Network Computing (February 1998)
Standard Classes for Numerical Computing
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.
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.
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
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
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)
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.
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.
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
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.
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.
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.
An attempt to implement fully multithreaded version of Colt. Still in
early development stage.
RngPack, a pseudorandom
number generator library.
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
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
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
la4j is a pure Java library for
linear algebra that uses many structural and object oriented patterns from the classic
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
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.
package in the Java 3D(TM)
API provides general matrix and vector classes (GMatrix,
along with its specialized matrix classes for graphics applications.
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
Extended Languages 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().
class: readapts java.io.Reader to correctly parse floating point
numbers in scientific notation.
Linking Java to Other Technical Computing Packages
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
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
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.
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
Work of the Java Grande Forum featured in
video-taped interviews with
John Gage at JavaOne 2000.
Towards a Science of Reliable Programming
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.
Slides in PDF
An Evaluation of Java for Numerical Computing
B.L. Blount and S. Chatterjee
Numerical Performance in Java
Working Paper, January 1999.
Is Java ready for computational science?
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.
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
Borneo, a Java
dialect with true support for the IEEE 754 floating-point standard
Joseph D. Darcy
validlab's Java numerics page
List of Java Compilers and Virtual Machines
Index of Scientific Java resources on the Web
Java at Sun
Java Community Process
Other NIST Projects Related to Java