changes are documented further down.
1. Added support for OpenMP 2.*, useful for compilers that do
not support OpenMP >= 3.0, e.g. MSVC, Apple g++.
2. New examples directory with 12 simple example programs.
3. New doc/API file that lists the public member functions of the
PrimeSieve and ParallelPrimeSieve C++ classes.
4. The Makefile is now POSIX compatible, it works with any POSIX
shell e.g. sh, bash, ash, ksh, zsh, ...
5. The Makefile now supports MinGW (with MSYS) and Cygwin.
6. Fixed a shared libprimesieve bug (read doc/BUGS).
7. Up to 10 percent faster prime number generation due to new
internal 64-bit getNextPrime() (previously 32-bit).
8. New unsynchronized ParallelPrimeSieve::generatePrimes() method
that calls back primes in parallel (read EXAMPLES).
9. Faster thread synchronization in ParallelPrimeSieve, replaced slow
OpenMP critical directive with faster omp_test_lock().
10. Optimized prime k-tuplet (twin primes, ...) counting for
out-of-order CPUs (src/soe/PrimeNumberFinder.cpp).
11. New primesieve_error() exception used for all exceptions within
PrimeSieve and ParallelPrimeSieve (read EXAMPLES).
12. New pre-sieve code (src/soe/PreSieve.cpp).
13. Ported the primesieve GUI application from Qt 4 to Qt 5.
API changes
-----------
The PrimeSieve 3.* count methods:
uint64_t getPrimeCount(uint64_t start, uint64_t stop);
uint64_t getTwinCount (uint64_t start, uint64_t stop);
...
Have been renamed to:
uint64_t countPrimes (uint64_t start, uint64_t stop);
uint64_t countTwins (uint64_t start, uint64_t stop);
uint64_t countTriplets (uint64_t start, uint64_t stop);
uint64_t countQuadruplets(uint64_t start, uint64_t stop);
uint64_t countQuintuplets(uint64_t start, uint64_t stop);
uint64_t countSextuplets (uint64_t start, uint64_t stop);
uint64_t countSeptuplets (uint64_t start, uint64_t stop);
Changes in version 3.8, 13/07/2012
==================================
1. Improved OOP design of WheelFactorization.h.
2. Minor speed up for big sieving primes ~2% (src/soe/EratBig.cpp),
reduced the number of operations in the main sieving loop.
3. Minor speed up for small sieving primes ~3% (src/soe/EraSmall.cpp),
new inner sieving loop without instruction dependencies that uses
only 12 asm instructions (previously 16).
4. Improved OpenMP load balance in src/soe/ParallelPrimeSieve.cpp.
5. Improved code readability of EratSmall.cpp, EratMedium.cpp,
EratBig.cpp, Erat.cpp and others.
6. The Makefile now automatically detects the CPU's L1 data cache
size on Unix-like OSes (Linux, Mac OS X).
7. Renamed ./docs to ./doc
8. Revised README.txt, added 7. Motivation.
9. Updated INSTALL, LIBPRIMESIEVE and EXAMPLES.
10. Added version defines to PrimeSieve.h, e.g. for this release:
define PRIMESIEVE_VERSION "3.8"
define PRIMESIEVE_MAJOR_VERSION 3
define PRIMESIEVE_MINOR_VERSION 8
define PRIMESIEVE_YEAR 2012
Changes in version 3.7, 31/05/2012
==================================
1. More aggressive inlining (*-inline.h), up to 10 percent faster
prime number generation, up to 20 percent faster initialization.
2. Reduced header file dependencies, libprimesieve now only depends on
PrimeSieve.h or ParallelPrimeSieve.h (and PrimeSieve.h).
3. Updated Makefiles.
4. New template imath.h functions: isqrt(), ilog2(), isPow2(), ...
isqrt() has been rewritten using Newton's algorithm in order to
avoid rounding errors of (int)sqrt((double)n) if n > 10^15.
5. New internal Erat::getNextPrime(...) member function.
6. Replaced old C-style comments with C++ comments.
7. Updated ExpressionParser to version 2.2.
8. uin32_t has been replaced by uint_t in src/soe/*.
9. New int API for PrimeSieve and ParallelPrimeSieve objects, getters
and setters now use int instead of uint32_t.
10. Updated documentation files: README, INSTALL, LIBPRIMESIEVE,
EXAMPLES, VALGRIND, TODO, BUGS.
Changes in version 3.6, 22/04/2012
==================================
1. Improved code readability and updated source code documentation
(src/soe directory).
2. Removed unused source code. The deprecated API of
PrimeSieve <= 3.4 is not supported anymore, use
PrimeSieve::getStart() instead of PrimeSieve::getStartNumber() ...
The file EXAMPLES contains the up-to-date API.
3. src/soe/EratSmall.cpp has been enhanced to better take advantage of
Instruction-Level Parallelism.
Changes in version 3.5, 07/02/2012
==================================
1. Bug fix for big-endian CPUs (PowerPC, SPARC), see docs/BUGS.
2. The GNU Makefile now provides an option to build primesieve as
a shared library e.g. `make lib SHARED=yes`.
3. I have rewritten the main documentation files docs/LIBPRIMESIEVE
and docs/EXAMPLES.
4. I have added convenience functions to the PrimeSieve class:
void printPrimes (uint64_t start, uint64_t stop);
void printTwins (uint64_t start, uint64_t stop);
void printTriplets (uint64_t start, uint64_t stop);
void printQuadruplets(uint64_t start, uint64_t stop);
void printQuintuplets(uint64_t start, uint64_t stop);
void printSextuplets (uint64_t start, uint64_t stop);
void printSeptuplets (uint64_t start, uint64_t stop);
uint64_t getPrimeCount (uint64_t start, uint64_t stop);
uint64_t getTwinCount (uint64_t start, uint64_t stop);
uint64_t getTripletCount (uint64_t start, uint64_t stop);
uint64_t getQuadrupletCount(uint64_t start, uint64_t stop);
uint64_t getQuintupletCount(uint64_t start, uint64_t stop);
uint64_t getSextupletCount (uint64_t start, uint64_t stop);
uint64_t getSeptupletCount (uint64_t start, uint64_t stop);
void sieve(uint64_t start, uint64_t stop);
void sieve(uint64_t start, uint64_t stop, uint32_t flags);
void sieve();