| 
	 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)  
 | 
  | 
	 Numerics   Working   Group
  | 
 
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.
 
Reports 
 
Presentations 
Proposed APIs for Numerical Computing
 
 | 
  | 
| 
	Meetings
  | 
 Future
 
Past
 
- 
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 on Java 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) 
 - Workshop
on Java for High Performance Computing at HPCN-Europe 2000  in Amsterdam 
(May 8-10, 2000) 
 - http://www.acl.lanl.gov/iscope99/ 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) 
 - 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) 
  
 | 
  | 
| 
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.
 
 
 General
  
 | 
  | 
| 
	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 java.io.Reader 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 http://imagelib.ncsa.uiuc.edu/Horizon 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
 Postscript
 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. 
 ftp://ftp.cs.unc.edu/pub/users/sc/papers/sp-java.pdf PDF
 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. 
 PDF 
 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. 
 PDF 
 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
 Mathtools.net 
 Java at Sun
 Sun Microsystems 
 Java Community Process
 Sun Microsystems 
 Other NIST Projects Related to Java 
 
 |