As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.

1 2 -------------------- 3 MAPM Library History 4 -------------------- 5 6 V 1.00 - June 1, 1999 Initial Release 7 8 V 1.10 - June 20, 1999 Use a stack implementation for local M_APM 9 variables instead of static variables. 10 11 Use a new faster algorithm for SIN & COS. 12 13 V 1.20 - July 10, 1999 Improve the algorithm for ARCSIN and ARCCOS 14 when the input argument is near 1.0. 15 16 Added the 'DUP' operator to the 'calc' demo 17 program. 18 19 V 1.30 - July 31, 1999 Added a function to output M_APM values as 20 integers. 21 22 Supply another demo program which generates 23 prime numbers (and uses the integer output 24 format). 25 26 Improved the 4 iterative routines, dynamically 27 adjusting the local precision each time through 28 the loop. Also changed the tolerance test to 29 use integers (vs a MAPM number). 30 31 V 2.00 - Aug 15, 1999 Added a 'fast' multiplication algorithm. 32 33 V 2.10 - Sep 24, 1999 Added integer POW function. Compute X^Y when 34 'Y' is an integer. 35 36 Added a random number generator (with a period 37 of 1.0E+15). 38 39 Added function to compute both sin and cos with 40 one call. 41 42 V 2.15 - Feb 10, 2000 Allow caller to easily use their own memory 43 management functions. 44 45 Implement the real exponential algorithm as 46 originally intended by David Bailey. 47 48 Delete the extra recursive function from the 49 fast multiply routine. 50 51 Calculate a few extra digits in the intermediate 52 results of 'calc' so the final answers are 53 always consistent. 54 55 V 2.20 - Mar 30, 2000 Let log, arc-sin, and arc-cos determine the 56 max number of iterations that should be required 57 to calculate a given precision level. 58 59 Optimize the raw series expansion for exp, sin, 60 and cos to use integers instead of MAPM numbers 61 in the tolerance test to determine loop termination. 62 63 V 2.25 - Apr 2, 2000 Added a CBRT function (cube root) 64 65 Added the hyperbolic SIN, COS, and TAN functions 66 plus their inverses. 67 68 Alias m_apm_asin to m_apm_arcsin. Also for acos, 69 atan, and atan2. 70 71 Updated CALC and VALIDATE to use the new functions. 72 73 V 3.00 - Apr 7, 2000 Added the MAPM C++ wrapper class. Supplied by 74 Orion Sky Lawlor (olawlor@acm.org) 75 This C++ class allows 'normal' syntax when using 76 the library. 77 78 V 3.05 - Apr 14, 2000 Optimized the basic divide algorithm. It is now 79 approx 10 - 15 % faster. 80 81 Optimized the fast multiply algorithm. It is now 82 approx 2X faster. (depends on input numbers, 83 sometimes I got 50%, other times 3X) 84 85 V 3.06 - May 6, 2000 Optimized a few more functions. 86 87 In 'CALC', recompute PI on the fly if more digits 88 are asked for than the default precision. 89 90 Changed default compile optimizations to use 91 '-O2' instead of '-O'. Just making a note. 92 in case some compilers don't handle this well. 93 94 V 3.10 - May 21, 2000 Eliminated all warnings due to internal constants 95 lacking enough precision for a given calculation. 96 Any internal constant (like PI, log(2)) lacking the 97 precison needed for a given calculation will be 98 re-computed on the fly as necessary. The only 99 warnings from the library now are legitimate domain 100 errors, sqrt of a negative number, etc. 101 102 V 3.15 - May 26, 2000 Optimize the factorial function. It is now approx 103 10X faster when N is large (i.e., N > 5000). 104 105 Return 1 from pow function when computing 0^0. 106 107 V 3.16 - Jun 24, 2000 Added makefile for Borland 5.2 / 5.5 C++ 108 command line compilers for Win NT/9x. 109 110 Fixed link problems due to some C libraries not 111 having native cube root or inverse hyperbolic 112 functions. 113 114 V 3.50 - Jul 4, 2000 Added an FFT (Fast Fourier Transform) based 115 fast multiplication. The FFT fast multiplication 116 is O(N * Log2(N)). The FFT used is from the 117 Numerical Recipes book. 118 119 Fixed extern int declare in M_APM.H due to 120 variable name mangling in MSVC C++ compiler. 121 122 V 3.51 - Jul 7, 2000 Changed the FFT. The new FFT is from Takuya OOURA. 123 email: ooura@mmm.t.u-tokyo.ac.jp 124 125 Added build batch file for MSVC C++ compiler. 126 (Note: I can't verify this works since I don't 127 have MSVC C++) 128 129 V 3.55 - Jul 12, 2000 Optimized the FFT set-up wrapper function. Convert 130 MAPM base 100 numbers into base 10000 before 131 invoking the FFT. (2X speed improvement and 1/2 132 the RAM usage) 133 134 Use the AGM (Arithmetic-Geometric Mean) to 135 calculate PI when a more precise value is needed. 136 137 Added a real Makefile for Unix builds (finally!) 138 139 V 3.56 - Jul 19, 2000 Decrease the max number of bytes the FFT can 140 handle. *Worst* case inputs (all 9's) could have 141 caused the FFT math to overflow. 142 143 Added a build batch file for older Borland 144 compilers. (Works with Turbo C++ 3.00) 145 146 V 3.60 - Aug 24, 2000 Added 36 'memory' locations to the calc demo 147 program. 148 149 Added a new function to determine if a MAPM 150 number is an integer value or not. 151 152 When computing X^Y with the pow function, 153 automatically call integer_pow if 'Y' is 154 an integer value. 155 156 V 3.65 - Oct 1, 2000 Added a reciprocal function using an iterative 157 method. 158 159 Used the new reciprocal function to improve the 160 divide function. 161 162 Implemented an improved SQRT alogrithm. The new 163 one only uses multiplication and subtraction. 164 (The old algorithm used division which is slow). 165 166 V 3.70 - Nov 10, 2000 Use a more efficient 'log' algorithm and also 167 use a series expansion if the input is very close 168 to '1'. 169 170 Made a minor speed optimization to cube root. 171 172 Added build batch file for MSVC C++ compiler which 173 also uses a real 'makefile'. 174 175 V 3.75 - Dec 10, 2000 Use more efficient 'arc' family of functions if 176 the input arg is very close to zero. 177 178 V 3.80 - Mar 1, 2001 Improve the prime number demo program. 179 180 A number of minor code tweaks. This was mainly 181 in preparation for the upcoming 64 bit compilers. 182 I think everything is ready, but I really won't 183 know until I can actually get my hands on one ... 184 185 V 3.85 - Apr 2, 2001 Added new 'floor' and 'ceil' functions. 186 187 Use a new multiplier in the random number generator. 188 189 Added a build batch file for the LCC-WIN32 compiler. 190 191 V 4.0 - Jul 21, 2001 Added functions to compute GCD (greatest common 192 divisor) and LCM (least common multiple). 193 See 'm_apm_gcd' and 'm_apm_lcm'. 194 195 Added GCD and LCM to the 'calc' demo program. 196 197 Added new utility functions to determine if a MAPM 198 integer value is EVEN or ODD. See 'm_apm_is_even' 199 and 'm_apm_is_odd'. 200 201 Added function to release ALL memory that MAPM 202 has allocated. Added similiar function to trim 203 memory usage of MAPM without impacting any library 204 operation. See 'm_apm_free_all_mem' and 205 'm_apm_trim_mem_usage'. 206 207 Made a minor speed optimization to SQRT. 208 209 Optimized the normalization function. 210 211 Optimized the series expansion function for 212 sin/cos/exp. This has the added benefit of also 213 speeding up log, log10, pow, arc_###, etc. 214 215 V 4.1 - Aug 10, 2001 Fixed a minor problem with m_apm_to_integer_string. 216 If the input was 'slightly' smaller than an integer, 217 it would round the value up to the next int. 218 'Slightly' here means 1.0E-4 or smaller. If the 219 input was NNN.9999+ then NNN+1 would be returned. 220 The documented behavior is to truncate the value 221 to the next smallest integer and it now behaves as 222 expected. 223 224 Note: The previous function always gave the correct 225 output if the input was already an integer value 226 (which is why I didn't notice for so long ...). 227 228 Optimized the basic multiply function. 229 230 Added a build batch file for the Watcom C 11.x 231 compiler. 232 233 Changed the MSVC C++ compiler build from a makefile 234 back to a batch file (MKALLMSC.BAT). The makefile 235 was cumbersome and difficult to maintain. If the 236 user consensus wants the makefile back, I'll put 237 it back in. 238 239 V 4.2 - Oct 3, 2001 Added 3 functions to convert an MAPM number to a 240 string in fixed point format. Format 1017.829 as 241 "1017.829" instead of "1.017829E+3". 242 243 See the following functions: 244 245 m_apm_to_fixpt_string (basic function) 246 m_apm_to_fixpt_stringex (extended function) 247 m_apm_to_fixpt_stringexp (extended & returns char *) 248 249 V 4.3 - Feb 17, 2002 Include a PDF version of my article which was 250 first published in the November 2001 issue of 251 C/C++ Users Journal. 252 253 Made a minor optimization to _scale (the speed is 254 the same, but 2 temporary arrays were eliminated by 255 processing the scaling operation in reverse). 256 257 Added some comments and initial setup changes to 258 the prime number demo program. 259 260 Added some conditional compiler directives to 261 support the Metrowerks CodeWarrior 7.0 compiler. 262 (since I don't have it, I don't really know if 263 this will work ...) 264 265 Added a conditional compiler directive so the 266 user can disable the FFT multiply algorithm. 267 (the default is to still use the FFT multiply.) 268 269 Add a new function to prime the random number 270 generator with a known seed value (needed for 271 repeatable random sequences). 272 273 V 4.4 - Jun 14, 2002 Added a build batch file for the MINGW-32 compiler. 274 275 Change the internal stack used for temporary MAPM 276 numbers into a dynamically malloc'ed array. 277 278 Updated m_apm_cpp_precision so it can be called 279 prior to a call to m_apm_init. 280 281 Updated the documentation to indicate that the 282 default library is *NOT* thread-safe and problems 283 could occur in a multi-threaded application unless 284 certain precautions are taken. 285 286 Split mapmutil.c into 2 files since it was getting 287 too big. 288 289 V 4.5 - Nov 10, 2002 Added a makefile for the MAC (OSX). 290 291 Changed all library function parameter declarations 292 to use the modern form instead of the classic form. 293 294 Changed the order of the elements in the M_APM 295 structure. The M_APM structure in m_apm.h is not 296 compatible with previous versions of the library. 297 This was done to optimize for future 64 bit 298 architectures where sizeof(pointer) > sizeof(int). 299 300 Added a new integer pow function that does not 301 perform any rounding of the answer. This is needed 302 for integer only applications where full precision 303 must be maintained. See 'm_apm_integer_pow_nr'. 304 305 V 4.6 - Apr 7, 2003 Made a minor speed optimization in sqrt by rounding 306 an intermediate result in the iteration. 307 308 Implement a new cubically convergent log algorithm 309 (each iteration yields 3X more digits). 310 311 Compute internal constants log(2) and log(10) with 312 an AGM algorithm. 313 314 Move the output of all error messages into a 315 stand-alone function. All error messages now call 316 this function. This allows the user to easily 317 change the default reaction (which is output to 318 stderr) by only changing the one function. 319 320 V 4.6.1 - Apr 12, 2003 Fix a bug where specially contrived test input 321 could result in the new log algorithm terminating 322 too soon. 323 324 Applied lessons learned from the log bug to make 325 the asin & acos functions more efficient. 326 327 V 4.7 - Jun 10, 2003 Include the thread safe function wrappers in this 328 release. The necessary files are in the directory 329 'multi_thread' for the unix distribution and in 330 'multithd' for the Win/Dos distribution. 331 332 Added #define to obtain a clean compile with 333 Open Watcom 1.0 (using mkallwat.bat). 334 335 Add 2 functions to get the version of the compiled 336 library. See 'm_apm_lib_version' and 337 'm_apm_lib_short_version'. These could be very 338 useful when MAPM is used as a shared library/DLL. 339 (Long Overdue ....) 340 341 Implement faster cbrt algorithm. 342 343 Optimize the raw sin algorithm. 344 345 Implement another log algorithm. See details in 346 'algorithms.used'. Testing on my system has shown 347 that it is faster than an AGM algorithm, up to 348 ~100,000 digits anyway. An AGM _should_ eventually 349 be faster, but I didn't find that cross-over point. 350 351 Move the generic error handling function into it's 352 own separate module. This allows the user to easily 353 replace the function (with their own version) 354 without changing the base library. 355 356 V 4.8 - Jul 27, 2003 Fix a bug in arctan. Very large inputs (> 1e16) 357 could cause incorrect answers in the last few 358 digits of the result and only under certain decimal 359 place accuracies. PI/2 was being returned (instead 360 of PI/2 - epsilon) due to a rounding problem. Thanks 361 to Ivano Primi for bringing this to my attention. 362 363 Fix arcsinh when the input was a very large negative 364 number. Under certain combinations of large input 365 values with certain decimal place accuracy would 366 result in a log(0). Thanks again to Ivano Primi. 367 368 Fix m_apm_set_double. An invalid input (NAN or 369 +/- INF) could cause MAPM to crash. Lesson here is 370 to always check return codes of function calls, even 371 when they cannot possibly fail. Thanks to Luiz H. de 372 Figueiredo (of the Lua project) for this report. 373 374 Did a complete re-write of validate. The intent of 375 this is to use the 'gcov' code coverage tool to get 376 as much code coverage of the library that is 377 practical. 100% code coverage is not obtained (nor 378 practical), but it's quite close. (Needs more work 379 in fixed point formatting.) 380 381 Convert all build scripts/makefiles to use a common 382 naming convention. All .a libraries will use the 383 base name 'libmapm' (libmapm.a). All .lib libraries 384 will use the basename 'mapm' (mapm.lib). 385 386 Include a short script to build a Linux shared 387 library. Other Unix systems should have similiar 388 commands. Most users won't need this. 389 390 Modify all error/warning messages so they have a 391 consistent format. 392 393 V 4.8.1 - Nov 30, 2003 Added support for National Instruments LabWindows 394 CVI. Some minimal help instructions on how to set up 395 various project files can be found in 'labwindw.cvi'. 396 This is the only update, so users of version 4.8 397 will have no compelling reason to upgrade. 398 399 V 4.9 - Jan 3, 2004 Simplify logic and make minor optimization in AGM 400 log algorithm. 401 402 Simplify logic in the exp algorithm. This also 403 resulted in the exp algorithm being more 'well 404 behaved'. 405 406 Include a new file (commentary.txt). This is just a 407 brief discussion on a design decision of why there 408 is (one) 'exit' call in the library. 409 410 Include 4 sample programs to compute PI (in the 411 directory 'pi_demo'). These are not meant to be 412 the fastest programs for PI, they are here simply 413 to demonstrate how to use the library. These could 414 be used as a starting template for a new program. 415 416 V 4.9.1 - Apr 2, 2004 Added a warning to the exp function if the input is 417 too large. If the input is too large, overflow can 418 occur internally so a warning will be output and 419 the result will be 0. 420 421 Made minor optimizations to the basic multiply and 422 the divide & conquer multiply. 423 424 Checked out the library with a new free compiler, 425 DEV-CPP (DEV-C++) 5.0 Beta 8 release 4.9.8.0. This 426 environment uses the mingw gcc compiler under the 427 hood, so everything worked fine using mkallmgw.bat 428 to compile the library. 429 430 Document a known COMPILER BUG with Microsoft's 431 Visual C++ 7.x (VS.NET 2003). This compiler bug 432 outputs error C2676 in a C++ application. (C apps 433 are OK). See the README file for a workaround. 434 435 Document the numerical limitations of the library. 436 (max/min significant digits, exponents, etc). 437 See the README file for more details. 438 439 V 4.9.2 - Jun 10, 2004 Added the % operator (and %=) to the C++ wrapper. 440 441 Added a MOD operator to 'calc' demo program. 442 443 Fixed a potential buffer overflow in the 'exp' 444 function. 445 446 V 4.9.5 - Dec 10, 2007 Updated software license, allowing distribution 447 of modified source code. 448 449 The actual library source code is identical to 450 version 4.9.2 (except the obvious library version 451 identifier, and Digital Mars #ifdef). 452 453 Added support for the Digital Mars Compiler. 454 455 Added build script for Intel Linux Compiler. 456 457 V 4.9.5a - Feb 21, 2010 Updated authors email address. 458 459 Note that there are no changes to the library 460 source code - so the library will still identify 461 itself as "4.9.5". 462 463 Added Makefile for Microsoft Visual Studio 2005. 464 465 Added another Makefile for MAC OSX (for 10.6). 466 467 **************************************************************************