28964d30f7merged: x86_64 asm code for Microsoft Visual compiler file: ttmathuint_x86_64_msvc.asm from chk branch (original was: ttmathuint_x86_amd64_msvc.asm) (this file should be compiled first because MS VC doesn't support inline assembler in x86_64 mode)Tomasz Sowa2009-09-07 02:03:00 +0000
0d71b0cec2merged: AboutEqual() from chk branch deleted: properties svn:mime-type from ttmath.h (it was for testing viewvc)Tomasz Sowa2009-09-05 16:43:38 +0000
3544a1df3csetting svn:mime-type to text/plain for ttmath.hTomasz Sowa2009-08-24 05:08:13 +0000
00519ff26dadded/fixed: special version of ToString_LogBase() method in single thread environment the previous version of the method didn't store the calculated logarithmsTomasz Sowa2009-08-04 18:55:18 +0000
799e2c32a7added: multithread support for Big<> class you should compile with TTMATH_MULTITHREADS and use TTMATH_MULTITHREADS_HELPER macro somewhere in your *.cpp file added file: ttmaththreads.h (look there for more info)Tomasz Sowa2009-08-04 18:23:35 +0000
51e938eaa7- update to current root trunc's version - update to root trunc's UNICODE support
chk
Christian Kaiser
2009-07-29 10:46:48 +0000
e102086f80- fixed a bug in 64 bit ASM for MSVC
Christian Kaiser
2009-07-28 16:34:04 +0000
53547cfab5* added: global Gamma() function * added: gamma() function to the parser * added: Big::IsInteger() method returns true if the value is integer * added: CGamma<ValueType> class is used with Gamma() and Factorial() in multithreaded environment * changed: Factorial() is using the Gamma() function now * removed: Parser<>::SetFactorialMax() method the factorial() is such a fast now that we don't need the method longer * removed: ErrorCode::err_too_big_factorialTomasz Sowa2009-07-16 03:22:29 +0000
d3a64b79caadded: support for wide characters (wchar_t) wide characters are used when macro TTMATH_USE_WCHAR is defined this macro is defined automatically when there is macro UNICODE or _UNICODE defined some types have been changed char -> tt_char std::string -> tt_string std::ostringstream -> tt_ostringstream std::ostream -> tt_ostream std::istream -> tt_istream normally tt_char is equal char but when you are using wide characters then tt_char will be wchar_t (and so on) (all typedef's are in ttmathtypes.h)Tomasz Sowa2009-07-02 01:04:25 +0000
51b2c974a1- changed "AboutEqualWithoutSign()" to "AboutEqual()" because we need to take the sign into account!
Christian Kaiser
2009-06-26 15:24:27 +0000
5597373093- "streamlined" ttmathconfig.h a bit: a) Unicode support if TTMATH_USE_WCHAR is set (compiler must know wchar_t etc, of course) b) threading synchonisation uses WIN32 instead of __MSVC__ define, as this is OS dependent, not compiler dependent
Christian Kaiser
2009-06-26 11:14:51 +0000
de58378488- added AboutEqualWithoutSign() to big<> to allow 'suppression' of some unexpected results (that are perfectly logical though, given the possibly unrepresentable nature of binary representation of decimals) like
Christian Kaiser
2009-06-25 14:11:17 +0000
de64608ebaMerged against the current original ttmath trunk
Christian Kaiser
2009-06-25 11:07:55 +0000
b80f73f16bcreating 0.8.x branch of the ttmath library (copied from trunk)Tomasz Sowa2009-06-16 20:28:52 +0000
8972fdfdb3fixed: Sqrt(), Root() and Factorial() didn't correctly treat the NaN flag fixed: some methods should set 'err_improper_argument' when the argument is a NaN object (was: err_overflow) changed: version of the library: 0.8.5 nowTomasz Sowa2009-06-16 18:31:39 +0000
019a902fedchanged: small optimization in Big::ExpSurrounding0() and Big::LnSurrounding1() the remainder from a division '%' was changed with a bitwise And operation '&' ((i % 5) == 0) was changed to: ((i & 3) == 0) - it means ((i % 4) == 0) now the test if performed after 4 iterations (early were after 5 iterations) we can do that when the divisor is a power of 2 changed: optimization in Factorial() we're testing WasStopSignal() only after a few iterations it's faster now about 4 times on GCC 4.3.3 (when stop object is provided to the factorial)Tomasz Sowa2009-06-14 19:55:15 +0000
74553109a5fixed: (performance) in Big::LnSurrounding1() and Big::ExpSurrounding0() we can copy 'old_value = *this' only when 'testing' is trueTomasz Sowa2009-06-14 18:45:36 +0000
9e42a5a9fdfixed: Big::FromDouble() on a 32 bit platform: SetNaN() should be SetNan() /*compilation error*/Tomasz Sowa2009-06-11 15:03:22 +0000
1b6858616dfixed: in Big::FromDouble(): SetNaN() should be SetNan();Tomasz Sowa2009-06-11 10:04:50 +0000
d789ac5396added: using NaN flag in method Big::ToDouble() and Big::FromDouble() changed: some cosmetic changes to get rid of warnings generated by MS Visual 2008 when warning level is 4 changed: names of labels in asm code: p to ttmath_loop, end to ttmath_end p2 to ttmath_loop2 Robert Muir reported that there was a confict with boost::endTomasz Sowa2009-06-11 02:31:41 +0000
be8913866a- 32 bit ASM code and ASSERTS did not work as the ASM code put its result in EAX, but the ASSERT afterwards did destroy the EAX's contents, of course.
Christian Kaiser
2009-05-28 14:42:19 +0000
b31d34ebdd- fixed a bug in ttmath.g (missing closing brace in Cos())
Christian Kaiser
2009-05-28 11:52:31 +0000
be821b59dd- optimizations
Christian Kaiser
2009-05-28 11:31:29 +0000
bb2583649eadded: to Big<> class: support for NaN flag (Not a Number) bool Big::IsNan() - returns true if the NaN flag is set void Big::SetNan() - sets the NaN flag The NaN flag is set by default after creating an object: Big<1, 2> a; // NaN is set (it means the object has not a valid number) std::cout << a; // cout gives "NaN" a = 123; // now NaN is not set std::cout << a; // cout gives "123" The NaN is set if there was a carry during calculations a.Mul(very_big_value); // a will have a NaN set The NaN is set if an argument is NaN too b.SetNan(); a.Add(b); // a will have NaN because b has NaN too If you try to do something on a NaN object, the result is a NaN too a.SetNan(); a.Add(2); // a is still a NaN The NaN is set if you use incorrect arguments a.Ln(-10); // a will have the NaN flag The only way to clear the NaN flag is to assign a correct value or other correct object supposing 'a' has NaN flag, to remove the flag you can either: a = 10; a.FromInt(30); a.SetOne(); a.FromBig(other_object_without_nan); etc. changed: renamed macro CONSTANTSGENERATOR to TTMATH_CONSTANTSGENERATORTomasz Sowa2009-05-26 23:13:22 +0000
de1e7ac957more optimizations for MSVC assembler (parallelism, prefetch optimization, loop alignment, ...)
Christian Kaiser
2009-05-20 08:48:51 +0000
fdc292e91acurrent chk version - too many changes on both sides for now ;-(
Christian Kaiser
2009-05-19 10:50:41 +0000
5e5a106605changed: a little changes in all asm code it should be a little fasterTomasz Sowa2009-05-17 00:04:42 +0000
eaa19dd46aadded: uint UInt::Mul3(const UInt<value_size> & ss2) void UInt::Mul3Big(const UInt<value_size> & ss2, UInt<value_size*2> & result) a new multiplication algorithm: Karatsuba multiplication, on a vector UInt<100> with all items different from zero this algorithm is faster about 3 times than Mul2Big(), and on a vector UInt<1000> with all items different from zero this algorithm is faster more than 5 times than Mul2Big() (measured on 32bit platform with GCC 4.3.3 with -O3 and -DTTMATH_RELEASE) added: uint MulFastest(const UInt<value_size> & ss2) void MulFastestBig(const UInt<value_size> & ss2, UInt<value_size*2> & result) those methods are trying to select the fastest multiplication algorithm changed: uint Mul(const UInt<value_size> & ss2, uint algorithm = 100) void MulBig(const UInt<value_size> & ss2, UInt<value_size*2> & result, uint algorithm = 100) those methods by default use MulFastest() and MulFastestBig() changed: changed a little Mul2Big() to cooperate with Mul3Big() changed: names of methods in macros TTMATH_LOG() added: uint AddVector(const uint * ss1, const uint * ss2, uint ss1_size, uint ss2_size, uint * result) uint SubVector(const uint * ss1, const uint * ss2, uint ss1_size, uint ss2_size, uint * result) three forms: asm x86, asm x86_64, no-asm those methods are used by the Karatsuba multiplication algorithmTomasz Sowa2009-05-15 22:27:04 +0000
9b576ddbe2- corrected 64 bit assembler code (ebx was not preserved) - minor optimization
Christian Kaiser
2009-05-15 14:42:43 +0000
a8c3a506eaMSVC ASM improvements (no register saves necessary, as this is done automatically by the C compiler)
Christian Kaiser
2009-05-14 12:59:12 +0000
3ba94dca90git-svn-id: svn://ttmath.org/publicrep/ttmath/branches/chk@145 e52654a7-88a9-db11-a3e9-0013d4bc506e
Christian Kaiser
2009-05-11 12:30:05 +0000
cae50cd425- merged Tomasz' version 0.8.5
Christian Kaiser
2009-05-11 12:25:25 +0000
939d0f7519fixed: Big::Mod(x) didn't correctly return a carry and the result was sometimes very big (even greater than x) fixed: global function Mod(x) didn't set an ErrorCode object fixed: global function Round() didn't test a carry now it sets ErrorCode object changed: function Sin(x) to Sin(x, ErrorCode * err=0) when x was very big the function returns zero now it sets ErrorCode object to err_overflow and the result is undefined the same is to Cos() function changed: PrepareSin(x) is using Big::Mod() now when reducing 2PI period should be a little accurate especially on a very big 'x'Tomasz Sowa2009-05-11 01:50:00 +0000
05b67e7103changed: corrected spaces in changelogTomasz Sowa2009-05-09 01:34:45 +0000
1bae0d6cb8changed: in ttmathtypes.h 'typedef unsigned long long int ulint' has been put inside '#ifdef TTMATH_NOASM' in order to not confuse a compiler while compiling with strict iso c++ (errors about not defining 'long long' in the c++ standard)Tomasz Sowa2009-05-08 18:40:32 +0000
277dd72fb6fixed: UInt::AddInt() in no-asm code has incorrect assertion changed: UInt::SubInt() in no-asm code is a little faster now changed: small cosmetic changes in commentaries deleted: some debug #ifdef's from UInt::Div() (in no-asm code)Tomasz Sowa2009-05-08 18:14:00 +0000
00e39d3608added thread-safety to static history buffers (factorial and logarithm) for MSVC
Christian Kaiser
2009-05-07 11:37:10 +0000
37379d2f1f- fulfills test file log diff (32 and 64 bit) - macro for issuing the debug output to something else than std::out if specified
Christian Kaiser
2009-05-07 09:33:57 +0000
d7b67e4d47- minor changes for ASSERT macros - some more "unification" of 32 and 64 bits in typedefs - use of 'char' instead of 'unsigned char', as I may hope that 'char' usually is set to 'unsigned' in most development environments
Christian Kaiser
2009-05-06 15:47:15 +0000
c91bd24e98- support for MS specific code (__int64 etc) and warnings - support for AMD64 assembler (not thoroughly tested) - support for UNICODE I/O (strings and streams)
Christian Kaiser
2009-05-06 15:11:29 +0000
cbc12db22fdummy commit (user/password checking)
Christian Kaiser
2009-05-06 13:24:00 +0000
a7a7eb7808fixed: deleted default values for variables in some methods (file ttmathuint_x86.h) (they should only be put in declaration)Tomasz Sowa2009-05-05 07:47:10 +0000
e665f91682fixed: the problem with GCC optimization on x86_64 sometimes when using -O2 or -O3 GCC doesn't set correctly the stack pointer (actually the stack is used for other things) and you can't use instructions like push/pop in assembler code. All the asm code in x86_64 have been rewritten, now instructions push/pop are not used, other thing which have access to stack (like "m" (mask) constraints in Rcl2 and Rcr2) have also gone away, now the library works well with -O2 and -O3 and the asm code is a little fasterTomasz Sowa2009-05-05 07:20:10 +0000
85945b2bb0added: ttmathuint_x86.h, ttmathuint_x86_64.h, ttmathuint_noasm.h, all the methods which are using assembler code have been rewritten to no-asm forms, now we have: 1. asm for x86 file: ttmathuint_x86.h 2. asm for x86_64 file: ttmathuint_x86_64.h 3. no asm file: ttmathuint_noasm.h (it's used when macro TTMATH_NOASM is defined) The third form can be used on x86 and x86_64 as well and on other platforms with a little effort. (Temporarily I left there some '#ifdef's for debugging.)Tomasz Sowa2009-05-04 20:51:12 +0000
1efe39686badded: UInt::PrintLog(const char * msg, std::ostream & output) used for debugging purposes by macro TTMATH_LOG(msg) (it is used in nearly all methods in UInt class) added: macro TTMATH_DEBUG_LOG: when defined then TTMATH_LOG() put some debug information (to std::cout)Tomasz Sowa2009-05-01 14:53:21 +0000
fca1bc1a33added: Objects::IsDefined(const std::string & name) returning true if such an object is definedTomasz Sowa2009-04-02 05:21:49 +0000
c65857297bfixed: the parser didn't correctly treat operators for changing the base (radix) -- operators '#' and '&', e.g.: '#sin(1)' was equal '0' -- there was a zero from '#' and then it was multipied by 'sin(1)' the parser didn't check whether Big::FromString() has actually read a proper value -- the method Big::FromString() didn't have something to report such a situation fixed: Big::FromString() when the base is 10, the method reads the scientific part only if such a part it correctly supplied, e.g: '1234e10', '1234e+10', '1234e-5' previous '1234e' was treated as: '1234e0' (now parsing stops on 'e' and the 'e' can be parsed by other parsers, e.g. the mathematical parser -- now in the parser would be: '1234e' = '1234 * e' = '3354,3597...' ) added: to Int::FromString(): parameter 'const char ** after_source = 0' if exists it's pointing at the end of the parsed string added: to UInt::FromString(), Int::FromString(), Big::FromString(): parameter 'bool * value_read = 0' - (if exists) tells whether something has actually been read (at least one digit) added: the parser checks itself for the operators for changing the base (operators '#' and '&') changed: in the parser: the form with operators '#' and '&' is as follows: [-|+][#|&]numeric_value previous was: [-|+][#|&][-|+]numeric_value removed: Big::FromString() this method doesn't longer recognize operators for changing the base ('#' and '&') changed: in the parser: the short form of multiplication has the same priority as the normal multiplication, e.g.: '2x^3' = 2 * (x^3) previous the priority was greater than powering priority previous: '2x^3' = (2*x) ^ 3Tomasz Sowa2009-03-28 17:40:36 +0000
f530635262changed: doxygen.cfg changed lines ends: dos mode to unix mode (\r\n to \n)Tomasz Sowa2009-03-27 22:35:41 +0000
9327b4ebd4changed: updated CHANGELOG to previous commitTomasz Sowa2009-03-27 22:31:54 +0000
d695785cbbfixed: in function DegToRad(const ValueType & x, ErrorCode * err = 0) it is better to make division first and then mutliplication -- the result is more accurate especially when x is: 90,180,270 or 360 added: global template functions in ttmath.h: ValueType GradToRad(const ValueType & x, ErrorCode * err = 0) ValueType RadToGrad(const ValueType & x, ErrorCode * err = 0) ValueType DegToGrad(const ValueType & x, ErrorCode * err = 0) ValueType DegToGrad(const ValueType & d, const ValueType & m, const ValueType & s, ErrorCode * err = 0) ValueType GradToDeg(const ValueType & x, ErrorCode * err = 0) added: Parser::SetDegRadGrad(int angle) - 0 deg, 1 rad (default), 2 grad this affects following functions (in the parser only): sin, cos, tan, cot, asin, acos, atan, acot added: functions to the parser: gradtorad(grad), radtograd(rad), degtograd(deg), degtograd(d,m,s), gradtodeg(grad) removed: Big::Ln() and Big::Log() some old info was removedTomasz Sowa2009-03-27 22:26:51 +0000
85d1b87ac0added: '#ifndef __GNUC__' to Big::Pow() where is using '#pragma warning' in order to not confuse GCCTomasz Sowa2009-03-25 02:01:42 +0000
bfdc6d3df3fixed: Big::Pow(const Big<exp, man> & pow) it's using PowInt() only when pow.exponent is in range (-man*TTMATH_BITS_PER_UINT; 0] previously the powering 'hung' on an input like this: "(1+ 1e-10000) ^ 10e100000000" (the was 10e100000000 iterations in PowInt())Tomasz Sowa2009-03-25 01:12:00 +0000
3899b8631cfixed: template Big::FromBig(const Big<another_exp, another_man> & another) didn't correctly set the exponent (when the mantisses had different size - when 'man' was different from 'another_man') this had impact on operator= too sample: Big<2,3> a = 100; Big<3,5> b; b = a; // b had a wrong valueTomasz Sowa2009-03-24 20:34:33 +0000
460608859cadded: 'constgen' directory -- there is a program there to generate some constants used in ttmathbig.h changed: the size of built-in variables (constants) in ttmathbig.h now they consist of 256 32bit words macro TTMATH_BUILTIN_VARIABLES_SIZE is equal: 256u on a 32bit platform and 128ul on a 64bit platform added: macro CONSTANTSGENERATOR which is useful for generating constants (it's used by 'gen' program in 'constgen' directory) after declaring this macro the methods: ExpSurrounding0() and LnSurrounding1() will be public visible and the inner loop can do more iterations than TTMATH_ARITHMETIC_MAX_LOOP changed: in methods: ExpSurrounding0() and LnSurrounding1() - the way of comparising with the last word (now we're comparing not with the last state but with a state from a few words back)Tomasz Sowa2009-03-12 20:54:46 +0000
978815f12dfixed: there was a TTMATH_REREFENCE_ASSERT error in Big::PowUInt() caused by: start.Mul(start) fixed: Big::Add incorrectly rounded 'this' when both exponents were equal it caused that sometimes when adding a zero the result has changed this had impact among other things on FromString() method "0,8" had different binary representation from "0,80" changed: renamed: Big::PowUInt(UInt<pow_size> pow) -> Big::Pow(UInt<pow_size> pow) it returns 2 when there is: 0^0 changed: renamed: Big::PowInt(Int<pow_size> pow) -> Big::Pow(Int<pow_size> pow) it returns 2 when there is: 0^0 or 0^(-something) changed: renamed: Big::PowBUInt() -> PowUInt(), Big::PowBInt() -> Big::PowInt() they return 2 when the arguments are incorrect (like above) changed: UInt::SetBitInWord(uint & value, uint bit) is taking the first argument by a reference now, the specific bit is set in the 'value' and the method returns the last state of the bit (zero or one) added: UInt::GetBit(uint bit_index) - returning the state of the specific bit changed: UInt::SetBit(uint bit_index) - it's using TTMATH_ASSERT now changed: Big::Mod2() - it's using mantissa.GetBit() now added: Big::operator=(double) and Big::Big(double) added: TTMATH_ASSERT somewhere in ttmathuint64.h added: UInt::Pow(UInt<value_size> pow) and Int::Pow(Int<value_size> pow)Tomasz Sowa2009-03-11 19:05:13 +0000
404727f3dechanged: small changes in: UInt:: RclMoveAllWords, UInt::RcrMoveAllWords, UInt::SetBitInWord(), UInt::FindLeadingBitInWord, UInt::SetBitInWord fixed: UInt::Div() didn't return a correct result when the divisor was equal 1 there was an error in UInt::DivInt() - when the divisor was 1 it returned zero and the carry was set this error was from the beginning of the TTMath libraryTomasz Sowa2009-03-07 22:54:42 +0000
4aebe9aa18fixed: UInt::Rcr2_one used edx but there was not a push/pop instruction (it was in the intel syntax, edx changed to ecx)Tomasz Sowa2009-03-04 22:04:36 +0000
5b24101a83added: macros TTMATH_ASSERT to: UInt::AddInt UInt::AddTwoInts UInt::SubInt UInt::SetBitInWord fixed: UInt::FindLeadingBitInWord(x) didn't correctly return result -1 when the x was 0 the mistake made by Thomas Braby, it was not in the 0.8.2 release changed: tests: we do not test for lahf/sahf instructions now (in 64bit code) we don't use these instructionsTomasz Sowa2009-02-17 11:37:12 +0000
c7c859fc76changed: UInt::FromString(...) skips the input digits when the value is too big added: tests: addtwoints (only 32bit)Tomasz Sowa2009-02-16 17:57:34 +0000
1d81dc75fffixed: RclMoveAllWords() and RcrMoveAllWords() sometimes didn't return the proper carry, (when 'bits' was greater than or equal to 'value_size') this had impact on Rcl() and Rcr(), they also returned the wrong carryTomasz Sowa2008-10-31 20:43:08 +0000
712bfc9c3badded: UInt::Rcl2_one(c) and UInt::Rcr2_one(c) they are much faster than UInt::Rcl2(1,c) and Rcr2(1,c) changed: UInt::Rcl() and UInt::Rcr() we don't longer make the things with moving a half in the left and a half in the right we simply use Rcl2_one() and Rcl2() /Rcr2_one() and Rcr2()/Tomasz Sowa2008-10-30 23:38:24 +0000
91e7badb62changed: asm code in: UInt::Sub, UInt::SubInt (32 and 64bit) (much faster now) changed: asm code in: UInt::Rcl2, UInt::Rcr2 (32 and 64bit) previous versions of Rcl2 and Rcr2 had O(n2) complexity, now they have O(n) and are much faster changed: now we do not use LAHF and SAHF instructions (both in 32 and 64 bit code)Tomasz Sowa2008-10-29 21:54:27 +0000
cfd719cca2changed: asm code in UInt::Add, UInt::AddInt, AddTwoInts 32 and 64 bits, much faster now added: tests for UInt::AddInt fixed: tests: test_lahf() returned incorrect value for 32bit platformTomasz Sowa2008-10-25 20:05:51 +0000
f1115a2ce9added: test of the LAHF and SAHF instructions (on a 64bit platform)Tomasz Sowa2008-10-23 20:17:40 +0000
ca51020fe6changed: 64bit asm code didn't want to compile there were used 'lahf' and 'sahf' instructions probably they are supported in a new version of GCC with '-msahf' option but GCC 4.2.1 has no such option at the moment I'm using opcodes: lahf -> 9f sahf -> 9e Warning! these instructions are not on all 64bit processors from: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html "Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported by AMD64 until introduction of Pentium 4 G1 step in December 2005." changed: UInt::Add on 64bit platform changed: UInt::Add on 32bit platform (a little)Tomasz Sowa2008-10-22 18:56:04 +0000
f8f324f98fchanged: UInt::FromString, added a parametr 'after_source' which is pointing at the end of the parsing string added: initial import of tests: testing UInt::Add method (not finished)Tomasz Sowa2008-10-21 17:42:41 +0000
cdd95f602csome optimisations made in assembler code by thomasbraby at zoom.co.uk (not verified yet) modified files: ttmathuint.h ttmathuint64.h I've changed a little the intel syntax (it didn't want to compile)Tomasz Sowa2008-10-17 09:57:36 +0000
98c2379182changed: small changes especially cosmetic in documentation (commentaries) changed: version of the library: now 0.8.2
0.8.2
Tomasz Sowa2008-06-18 00:33:05 +0000
2933213a02changed: info about Big::ToString() the changes which were made in revision 60 and 63 (I forgot to change the info there)Tomasz Sowa2008-06-07 16:17:37 +0000
4d0241c9c9changed: the way of using Big::SetSign() the method do not check whether there is a zero or not now (even if there's a zero the method can set a sign bit) I changed this due to some prior errors (errors corrected in revision 17, 49 and 58) added: in Big::MulInt() checking whether the values are zeros and if so the metdhod returns zero immediately removed: file TODO (I didn't use it)Tomasz Sowa2008-06-07 14:07:59 +0000
4f3f05fa9dchanged: 'max_digit_after_comma' in Big::ToString() remove the -2 state added: 'remove_trailing_zeroes' in Big::ToString() it's either true or falseTomasz Sowa2008-04-12 08:46:09 +0000
f139e6457cadded: a short form of multiplication (without the '*' character) e.g. '5y', (it's used only if the second parameter is a variable or function) changed: variables and functions are case-sensitive now added: variables and functions can have underline characters in their namesTomasz Sowa2008-01-23 23:45:42 +0000
29bb4fb3f7added: 'decimal_point' parameter into Big::ToString(...) fixed: Big::operator>> didn't use TTMATH_COMMA_CHARACTER_2 macroTomasz Sowa2007-12-09 20:07:45 +0000
5002f435aefixed: there was an error in Big::FromInt(Int<int_size> value) SetSign() was used before the object was initializedTomasz Sowa2007-11-09 13:28:36 +0000
61886fc829added: Big::FromBig() and an operator= and a contructor for converting from another kind of a Big class added: to the parser: avg(), sum()Tomasz Sowa2007-11-04 21:56:04 +0000
25f876762afixed: Big::FromDouble(double) sometimes sets a wrong value there was SetSign() used when the value was not defined, and also was a small mistake when the mantissa was equal one word (on 32bit platforms) added: uint Big::ToDouble(double&) - converting into doubleTomasz Sowa2007-07-29 22:42:45 +0000
692ff5406eadded: a method Big::FromDouble(double) for 64bit platformsTomasz Sowa2007-07-23 21:29:27 +0000
669698c6d7added: method Big::FromDouble(double) which converts from standard double into a Big<> (only 32bit platforms)Tomasz Sowa2007-07-22 23:20:09 +0000
93ba8ce17dchanged: the parser is allowed to recognize values which begin with a dot, e.g '.5' is treated as '0.5'Tomasz Sowa2007-07-22 14:15:44 +0000
d27cabec93changed: Int::FromInt(const Int<argument_size> & p), Int::FromInt(sint value) (it returns zero now) Int::operator=(uint i) Int::Int(uint i) added: Int::FromUInt(const UInt<argument_size> & p), Int::FromUInt(uint value) and appropriate constructors and assignment operators as well changed: Big::FromInt(Int<int_size> value), added: Big::FromUInt(UInt<int_size> value), Big::operator=(const UInt<int_size> & value) Big::Big(const UInt<int_size> & value)Tomasz Sowa2007-05-27 23:33:47 +0000
bc9d528a75added: Uint::BitNot2() this method has been proposed by Arek <kmicicc AnTispam users.sourceforge.net>Tomasz Sowa2007-04-23 21:35:55 +0000
bb16c871c9changed: the way of parsing operators in the mathematical parser (the parser is not too much greedy now)
0.8.1
Tomasz Sowa2007-04-17 13:42:19 +0000
062881900achanged: small changes in: Big::SetPi(), Big::Set05Pi(), Big::Set2Pi(), Big::ChangeSign() added: ASinh(), ACosh(), ATanh() /ATgh()/, ACoth() /ACtgh()/ and to the parser as wellTomasz Sowa2007-04-12 17:17:22 +0000
0170572f84added: doxygen.cfg for generating a documentation from the doxygen changed: UInt::Rcl(uint c=0) and UInt::Rcr(uint c=0) into UInt::Rcl2(uint bits, uint c) and UInt::Rcr2(uint bits, uint c) now they can move more than one bit and they are only private fixed: UInt::Rcl(uint bits, uint c) and UInt::Rcr(uint bits, uint c) didn't correctly return a carry if the 'bits' were equal to 'value_size*TTMATH_BITS_PER_UINT' changed: UInt::Rcl(uint bits, uint c) and UInt::Rcr(uint bits, uint c) into UInt::Rcl(uint bits, uint c=0) and UInt::Rcr(uint bits, uint c=0) they are faster now when the bits is greater than a half of the TTMATH_BITS_PER_UINT changed: UInt::CompensationToLeft() it's faster now changed: more small changes where there were UInt::Rcl(uint c=0) and UInt::Rcr(uint c=0) usedTomasz Sowa2007-04-11 22:14:17 +0000
e40ed603c6added: UInt::MulInt(int, UInt<int another_size>::&) added: Big::MulUInt(uint) changed: Big::MulInt(sint) added: Big::ToUInt(uint &) changed: Big::ToInt(sint&) changed: Factorial() it uses Big::MulUInt() at the beginning (faster now especially more on a 32bit platform)Tomasz Sowa2007-04-07 22:21:31 +0000
c97ebf282ffixed: Big::PowFrac(..) didn't return a correct error code (when 'this' was negative) added: Root(x; index) (and to the parser as well) added: macro: TTMATH_PRERELEASE_VER (can be either zero or one)Tomasz Sowa2007-04-05 19:08:15 +0000
837490e8b9added: DegToDeg(deg, min, sec), DegToRad(deg), DegToRad(deg, min, sec), RadToDeg(rad), Ceil(x), Floor(x), Sqrt(x), Sinh(x), Cosh(x), Tanh(x) /Tgh(x)/, Coth(x) /Ctgh(x)/ changed: class Objects in ttmathobjects.h has been completely rewritten, we can change the names of user-defined variables or functions, and the names are case-sensitive now added: class History which is used in functions which take a lot of time during calculating e.g. Factorial(x) added: Tg(x) a wrapper for Tan(x) changed: CTan(x) is Cot(x) now added: Ctg(x) a wrapper for Cot(x) added: ATg(x) a wrapper for ATan(x) changed: ACTan(x) is ACot(x) now added: ACtg(x) a wrapper for ACot(x) added: UInt::PrintTable() (for debugging etc.) changed: the methods Big::SetPi() Big::SetE() and Big::SetLn2() have been rewritten, now they have 128 32bit words (it's about 1232 valid decimal digits) fixed: previous values from Big::SetPi() Big::SetE() and Big::SetLn2() were not too much accurate (last 2-3 words were wrong) added: Big::SetLn10() (128 32bit words as well) added: macro: TTMATH_BUILTIN_VARIABLES_SIZE which is equal 128u on 32bit platforms and 64ul on 64bit platforms (128/2=64) added: macros: TTMATH_PLATFORM32 and TTMATH_PLATFORM64 changed: a small optimisation in UInt::Mul2Big() added: at the end of ttmath.h: #include "ttmathparser.h" this is for convenience for a programmer, he can only use #include with ttmath.h even if he uses the parser added: to samples: big.cpp, parser.cpp fixed: constructor Big::Big(uint) - it was wrong because it was using the method Big::FromInt(sint) which could produce wrong values (if the 'uint' couldn't correctly be casted into the 'sint') added: Big::FromUInt(uint) changed: Big::FromInt(sint), Big::SetOne(), renamed Big::SetDotOne() into Big::Set05() (they are a little faster now) added: Big::operator=(uint) changed: in 64bit mode: constructor: Big::Big(int) added: in 64bit mode: constructor: Big::Big(unsigned int), operators: Big::operator=(signed int) and Big::operator=(unsigned int) (these operators and the constructor take a 32bit value) deleted: the word 'virtual' from destructors: UInt, Int, Big (types in this library are not projected to be base-classes for another ones derived from them) changed: UInt::operator=(uint), UInt::UInt(uint), Int::operator=(sint), Int::Int(sint) added: UInt::FromUInt(uint), UInt::operator=(sint), UInt::UInt(sint), Int::FromInt(sint), Int::operator=(uint), Int::Int(uint), Int::operator==(const Int<>&), Int::operator!=(const Int<>&) added: in 64bit mode: UInt::operator=(unsigned int), UInt::UInt(unsigned int), UInt::operator=(signed int), UInt::UInt(signed int) (these operators and the constructors take a 32bit value) added: in 64bit mode: Int::operator=(signed int), Int::Int(signed int), Int::operator=(unsigned int), Int::Int(unsigned int) (these operators and the constructors take a 32bit value)
0.8.0
Tomasz Sowa2007-03-28 22:27:57 +0000
abb8f292abadded: into the parser: SetFactorialMax()Tomasz Sowa2007-03-21 16:01:50 +0000
06e0294841added: checking whether an user gives a correct value of a variable or function (user-defined variables/functions in the mathematical parser) added: into the parser: logical operators: > < >= <= == != && || added: into the parser: logical functions: and() or() not() if() changed: a method for looking for a mathematical operator (there's the operators table now) added: ErrorCode::err_unknown_operator when the parser couldn't read an operatorTomasz Sowa2007-03-09 19:05:38 +0000
1a12d3692aadded: Big::Mod - the remainder from a division added: Big::Sgn - the 'sign' from the value (-1,0,1) added: global functions Mod and Sgn tooTomasz Sowa2007-02-28 17:52:53 +0000
e14e65002bfixed: removed 'const' from some methods (operators: += -= *= /=) in the Big class fixed: bad sizes in tables in some 'Set...' methods in the Big class fixed: Big::FromInt(Int<int_size> value) - the sign must be set at the end because SetSign checks whether there is zero and depends on it sets the sign or not (this was the stupid error which causes sometimes the errors 'overflow during printing') fixed: Big::SetMin - the sign must be set at the and changed: Big::Pow can use the reference now (the problem was actually with the Big::FromInt) added: a namespace 'auxiliaryfunctions' (in ttmath.h) added: ATan - arc tan, ACTan - arc ctanTomasz Sowa2007-02-27 20:18:33 +0000
d04632ea74fixed: constraints in asm operands for gcc added: UInt::SetFromTable for 64bit code (now the support for 64bit platforms seems to be completed) added: asin - arc sin, acos - arc cosTomasz Sowa2007-02-24 18:59:05 +0000