Redesign web pages (left navigation menu, style sheets, XHTML)
Search engine optimization: pi calculator is the most commonly used search key
Parallel pi calculator remove synchronization; use atomic longs for progress indicator
Getting the ApfloatContext remove synchronization
Heap based product calculation, take two smallest numbers from top of heap and recursively multiply, put back to heap
Applet default digits to million
Applet default factory to use the actual default property
Added shared memory treshold context parameter
Parallel multiplication to utilize other idle threads waiting to lock the same shared memory lock
1.5.1 April 25th, 2009
Added parallel and distributed Ramanujan algorithm for pi
Optimized NTT convolution strategy to avoid approximately half of the disk reads and writes when data fits to max memory block
Optimized NTT convolution strategy to conserve memory usage even when only memory data storages are used (synchronized on shared memory block)
Factor 3 NTT parallelized for six-step transform case
For disk data storage transfer, use the configured block size instead of system default (8kB, which is too small)
Fixed bug in missing autoconvolution in squaring with NTT convolution strategy
Fixed bug in missing radix match check in addOrSubtract, multiply and divideShort
1.5.2 August 26th, 2009
Improved parallel pi implementation by not doing parallel binsplits except for small enough ranges of terms (to improve memory usage and reduce waits due to parallel threads doing inequal amount of work)
Modular inverse support for ApintMath.modPow()
Wrote tutorial
1.6 June 12th, 2010
Added Apint.toBigInteger()
Added log(x, b)
Added log(x, b), root(x, n, k) and inverseRoot(x, n, k) to calculator
Added size()
Soft caches for precalculated pi and log radix values
Bug fix in double constructor
Parallel element-by-element multiplication and carry-CRT
Signed applets write files to temp directory (fixes no file write access bug)
Optimized constructor taking BigInteger
O(n log n) binary recursive GCD
1.6.1 June 22nd, 2010
Fixed race condition in using non-threadsafe DataStorage.subsequence() in parallel codes in 3-NTT convolution and carry-CRT
Made PiDistributed.Node protected instead of private
Fixed StackOverflowError in uppercase formatTo()
1.6.2 March 10th, 2011
Fixed bug in stream constructor when memory data storage changes to disk data storage
Instead of finalization, use a reference queue for disk storage; remove garbage collected files more reliably in out-of-disk-space situations
Accept "+" in exponent in Apfloat String constructor
Use package-info.java instead of package.html
When shutdown is in progress, avoid throwing NullPointerException from cache map (instead throw IllegalStateException)
Instead of finalization, use reference queues; added gc() to BuilderFactory for explicit reference queue emptying
1.6.3 October 31st, 2011
Allow getting transposed array of wider than tall section (for distributed version)
Google App Engine cloud compatibility fixes
Make some classes non-final and some Serializable
Maven deployment
1.7.0 December 23rd, 2012
Fractional part function Apfloat.frac() and subclass implementations
Rounding function ApfloatMath.round() and AprationalMath.round()
frac() and round() for FixedPrecisionApfloatHelper
ApfloatImpl.frac()
Apfloat.preferCompare() for determining if a reversed compareTo() mechanism should be used
Aprational and Apint denominator returns ONE in same radix
Many new interfaces to SPI to allow more fine-grained custom algorithms: NTTStepStrategy, Factor3NTTStepStrategy, NTTConvolutionStepStrategy, CarryCRTStrategy, CarryCRTStepStrategy
RawtypeMatrix retrofitted to MatrixStrategy SPI and made public more generic permuteToDoubleWidth(), permuteToHalfWidth(): RawtypeMatrixStrategy
Builders for the new SPI interfaces: AdditionBuilder, CarryCRTBuilder, MatrixBuilder
DataStorage.getArray(int mode, int startColumn, int columns, int rows), implGetArray(int mode, int startColumn, int columns, int rows)
DataStorage.isCached() instead of implementing RandomAccess
DataStorage.Iterator generic get() and set() methods
Generic three-NTT convolution strategy that uses the new StepStrategy SPIs: ThreeNTTConvolutionStrategy, ParallelThreeNTTConvolutionStrategy; removed Rawtype3NTTConvolutionStrategy
Generic classes for six-step and two-pass transforms that use the new StepStrategy SPIs: SixStepFNTStrategy, TwoPassFNTStrategy; removed RawtypeParallelFNTStrategy, RawtypeSixStepFNTStrategy and RawtypeTwoPassFNTStrategy
Generic CRT class that uses the CRT steps SPI: StepCarryCRTStrategy
RawtypeWTables for caching tables of n:th root of unity
Moved common methods to AbstractDataStorageBuilder, AbstractConvolutionBuilder, AbstractNTTBuilder, AbstractStepFNTStrategy
ParallelRunnable changed to abstract class; specify batch size; allow long ranges in addition to int ranges
Internal classes implement Parallelizable to have setParallelRunner(ParallelRunner)
Moved common methods to DiskDataStorage: implGetArray(), implGetTransposedArray(), setArray(), setTransposedArray(); new abstract methods createArrayAccess(), createTransposedArrayAccess()
Moved table FNT for FNT steps and table FNT strategy to new base class RawtypeTableFNT
Retrofitted RawtypeCarryCRT to RawtypeCarryCRTStepStrategy (mostly)
Retrofitted RawtypeFactor3NTTStrategy to RawtypeFactor3NTTStepStrategy
Removed RawtypeFactor3SixStepNTTStrategy as unnecessary (duplicate code, now being only done in RawtypeFactor3NTTStepStrategy)
1.7.1 March 19th, 2013
Fixed bug in exp() with exception thrown in case of underflow with very small exponents
1.8.0 November 24th, 2013
long memoryThreshold
Dynamic default values for memoryThreshold, blockSize
Default ExecutorService changed to use max numberOfProcessors - 1 threads and queue tasks
ParallelRunner semantics changed to use the default ExecutorService, with work stealing, no more locking needed
ParallelRunnable semantics changed to be run by many threads at the same time, work the same way for int and long length tasks
Parallelizable changed to be just a marker interface (ParallelRunner does not need to be set, is used statically only)
ApfloatImpl.size() is cached
Lambert's W function
toDegrees() and toRadians() functions
Parallel sum and product implementations
Simplify binsplit implementation in pi calculation
DataStorage.Iterator is Serializable
1.8.1 February 22nd, 2014
w(infinite precision) now throws exception
Fixed bug with DataStorage.getArray() and DataStorage.getTransposedArray() offsets >= 2GB
Fixed bug in TwoPassFNTStrategy trying to get array with size >= 2GB
GCD returns value for large argument and zero
Fixed calculator scale integer by negative value
In sample applets, reset executor service after adjusting max number of processors
Simplified ApfloatMath pi calculcation binsplit algorithm
Two-argument complex pow() and log() optimize precision in some cases
Optimize complex cos(), cosh(), sin(), sinh(), tan(), tanh() in case of real argument
1.8.2 January 21st, 2015
xxxBaseMath performance optimizations
Sample pi calculator performance optimizations
Performance optimizations for small number calculations
Performance optimizations for ApfloatContext.getContext()
Fixes for memory data storage with larger than 12GB allocations
1.8.3 May 7th, 2017
Add apfloat-aparapi module
Fix precision of atan2() in some cases where result is very small
Fix precision of exp() and log() if argument is very large
Fix finite precision integer power in calculator
1.9.0 July 6th, 2019
Require Java 8
Java 9 performance optimizations with multiplyHigh()
64-bit implementation by default
random() and randomGaussian() functons
Aprational double constructor
Exact number values
Gamma function
Assignment operators += -= *= /= ^= in calculator
Min and max functions
Use ForkJoinPool as executor service
Improve parallel runner wait()
System overrides for ApfloatContext properties
IsInteger methods
Tune convolution parameters
1.9.1 August 15th, 2019
Fixes for applets
Fix precision of consecutive calls to randomGaussian()
Catalan's constant, Glaisher-Kinkelin constant and Khinchin's constant
Function to calculate the constant e
More rounding functions
Numerous small fixes and improvements
1.12.0 October 24th, 2023
Continued fractions
Convergents
Comparators for Apcomplex
Small bug fixes
1.13.0 February 3rd, 2024
OSGi metadata
Many special functions: polygamma, pochhammer, regularized hypergeometric functions, erf, erfc, erfi, Fresnel S and C,
hypergeometric U, beta functions, exponential integrals, log, sin and cos integrals and hyperbolic sin and cos integrals,
Airy functions, Bessel functions, elliptic integrals, inverse erf and inverse erfc
Calculator no-arg functions for constants if fixed input precision is set
Handle acos(0) and acosh(0) in calculator if fixed input precision is set
More efficient calculation of very large input values for incomplete gamma, 0F1 and 1F1