Commit Graph

16287 Commits

Author SHA1 Message Date
John Ralls
4654f49d5c Fix build on older versions of gcc
Gcc 4.7 thinks there's a conflict with C99 stdint macros and C++, even with -std=c++11.
2014-12-07 13:57:55 -08:00
John Ralls
495c939c3e C++-numeric: Fix up some 64-bit and GCC problems.
Still won't compile on gcc-4.7 (f18) because of poor C++11 compliance wrt UINT64_MAX, UINT64_C, and PRIu_64 macros.
2014-12-07 11:42:39 -08:00
John Ralls
ae7e9c2412 Merge branch 'c++-numeric'
A new C++ implementation of 128-bit math replaces qofmath128.c with
gnc-int128.cpp, and the gnc-numeric arithmetic operations now wrap
the equivalent functions in a new GncRational class, which works with
a GncDenom class to handle rounding and denominator-type settings.

All arithmetic is now done with 128 bits of precision and no overflows
are signalled until conversion back to the int64_t-based gnc_numeric.
C++ clients will be able to use GncRational directly, at which point
some of its other functionality can be added; this will allow chained
128-bit arithmetic, which will permit more complicated calculations
without overflow.

Operators are not implemented for GncRational (they are for GncInt128,
which makes the GncRational implemntation much easier to read) because
of the need for passing denominator and rounding specs.
2014-12-05 15:47:54 -08:00
John Ralls
8a3e368791 Rename QofInt128 to GncInt128.
It has nothing to do with QOF.
2014-12-05 15:46:07 -08:00
John Ralls
d35bcdb877 Move arithmetic functions into C++ implementation. 2014-12-05 14:50:23 -08:00
John Ralls
8e429f7458 Rename GncNumeric to GncRational and move to its own files. 2014-12-04 11:48:08 -08:00
John Ralls
79938cae2e Remove qofmath128, replaced by qofint128. 2014-12-03 16:47:45 -08:00
John Ralls
7c7946dec8 Disable rescaling big GncNumerics when there is a pre-calculated auto denom. 2014-12-03 16:28:55 -08:00
John Ralls
503a607090 More overflow-avoidance.
One source of overflow during testing was changing the denominator on a
max-precision number. If the numerator was clamped with a large denominator,
changing to a smaller denominator without rescaling created a number that
would overflow later when applied to a commodity with a different SCU. This
change re-scales numerators in those cases so that the overflows don't happen.
2014-12-03 16:28:55 -08:00
John Ralls
456e121930 Ensure random numeric denominator is the account SCU when creating splits.
The lot creation and balancing code uses gnc_numeric_foo_fixed(), assuming that
all amounts in a split have the same denominator, the account's SCU. Ensuring
this when creating test cases prevents spurious failures.
2014-12-03 16:28:54 -08:00
John Ralls
b694df7202 Prevent overflow.
LCD denom was equivalent to using rounding.denom, which is val.denom * 10.
If val.num was at the max # of digits that would overflow, so instead
fix val.denom and actually round the result; since we're adding
5/(val.denom * 10) to accomplish the rounding we want to truncate the result.
2014-12-03 16:28:54 -08:00
John Ralls
701d8030b8 Ensure numeric errors aren't stored in split amounts or values. 2014-12-03 16:28:54 -08:00
John Ralls
c4d649bc93 A better, clearer approach to constraining random gnc_numerics
Which happens to actually work.
2014-12-03 16:28:54 -08:00
John Ralls
33a0c4e968 Reimplement gnc_numeric with QofInt128
And in a more C++ idiom.
2014-12-03 16:28:54 -08:00
John Ralls
ab94094523 Lose the value returns for various reasons of inequality. 2014-12-03 16:28:54 -08:00
John Ralls
a99335104f Assert that the quotient and remainder references aren't this.
Otherwise this gets zeroed and produces a wrong result.
2014-12-03 16:28:54 -08:00
John Ralls
f4c69dbc48 Ensure that the sign is correctly preserved and transferred. 2014-12-03 16:28:54 -08:00
John Ralls
9e37ad27b3 Implement QofInt128.pow. 2014-12-03 16:28:54 -08:00
John Ralls
f5c7b1101d Implement QofInt128::gcd and lcm. 2014-12-03 16:28:54 -08:00
John Ralls
765d5583c1 Fix mask error in operator<<= and operator>>=
Must specify 1 as a uint64_t to get the right masks.
2014-12-03 16:28:54 -08:00
John Ralls
7c22669a76 Check for incoming overflow and NaN on all class computational operators. 2014-12-03 16:28:54 -08:00
John Ralls
296ce314a3 Extract a class function bits() to return a size value.
Helps to pre-determine overflow. Also correct the original implementation
in operator *=, which got the wrong answer.
2014-12-03 16:28:53 -08:00
John Ralls
1b288df20d Add bitwise operators and binary operators. 2014-12-03 16:28:53 -08:00
John Ralls
c649aa9736 Some more constructors, for convenience. 2014-12-03 16:28:53 -08:00
John Ralls
810a6bc8ae Operators /= and %= plus function div() for QofInt128. 2014-12-03 16:28:53 -08:00
John Ralls
1c83db5896 Add increment, decrement, and shift-eauals operators to QofInt128.
They'll be needed for division.
2014-12-03 16:28:53 -08:00
John Ralls
c7752d5d3c Add zero and abs functions to QofInt128. 2014-12-03 16:28:53 -08:00
John Ralls
1e6855efe5 Implement operator*= for QofInt128 2014-12-03 16:28:53 -08:00
John Ralls
d4fdd9ef17 Begin QofInt128 class.
Constructs, adds & subtracts, prints, and compares.

Includes unit tests.
2014-12-03 16:28:53 -08:00
John Ralls
9d029d7f82 More realistic get_random_gnc_numeric()
Increases the possible denominators to 1E10, but clamps the numerator to
1E13 * denom with 1E19 max. This is equivalent to $1E8/1 US in
Indonesian Rupiah, the currency with the lowest per-unit value in the
world at the time of this commit.
2014-12-03 16:28:53 -08:00
John Ralls
996345a00f Fix gperformance-tools setup and apply it to src/engine/tests. 2014-12-03 16:26:38 -08:00
Robert Fewell
3c46aac94a Bug 738462 - CSV Import This patch adds some text to clarify that the transaction export is not a match for the import. 2014-11-30 15:43:18 +01:00
Robert Fewell
32dd199326 Bug 679791 - Import Template for importing CSV files - part2
This patch adds the option to Save and Load the CSV import settings.
2014-11-30 15:32:12 +01:00
Robert Fewell
eec86eec80 Bug 679791 - Import Template for importing CSV files - part 1.
This patch fixes the resetting of the widgets on the setting
preview page when you navigate back to the file selection page
in the assistant.
2014-11-30 15:31:37 +01:00
Geert Janssens
1b53d7fa2e Merge branch 'master' of https://github.com/c-holtermann/gnucash 2014-11-29 16:32:50 +01:00
Geert Janssens
e219ef22ea Merge branch 'maint' 2014-11-29 14:26:27 +01:00
Geert Janssens
abf78a202c Python bindings - fix creation of new xml files 2014-11-24 11:51:33 +01:00
John Ralls
19f08da56b Implement copy and move operator= and move constructor for KvpValueImpl
Fixes double-delete crash of the embedded ptr when copy-initializing.
2014-11-18 17:00:04 -08:00
lmat
ba59350f69 Adding KvpValueImpl test suite 2014-11-18 09:54:34 -08:00
Geert Janssens
e59c3e0639 Fix a few typos in python example scripts and align them with the latest api changes 2014-11-17 17:59:07 +01:00
Geert Janssens
22490a37ab Fix build-time hard-coded path introduced by the guile2 compile changes
These changes hardcoded the standards-reports path at build time.
On Windows and OS X the final path is only known at installation time.
So after installation the build-time hard-coded path would be invalid and
the standard-reports directory could no longer be found.
2014-11-17 14:48:02 +01:00
Geert Janssens
64d9a3b99e Prevent crash when standards-report dir doesn't exist 2014-11-17 15:43:16 +01:00
Christoph Holtermann
67b807fbf1 Small doc changes 2014-11-12 16:50:00 +01:00
Christoph Holtermann
de47330288 Change latex_invoices.py to query for all invoices
Before invoices were catched by going through lots
and getting associated invoices.
2014-11-12 16:45:53 +01:00
Christoph Holtermann
c86c69ad05 Additional doxygen doc 2014-11-12 16:39:08 +01:00
Christoph Holtermann
7d6caa8232 latex_invoices.py includes gncinvoicefkt.py 2014-11-12 15:30:13 +01:00
Geert Janssens
578dfd810b Fix head-or-tail stylesheet after guile2 compile changes
In particular the N_ macro is now defined in a separate module
which should be 'use-module'd when N_ is used.
2014-11-12 15:24:47 +01:00
Geert Janssens
dd65a6e39e Periodic merge of branch 'maint'
Fixed conflicts:
	src/test-core/Makefile.am

Most important changes:
* precompile scm files in case guile 2 is detected
* several new and updated translations
* several bugfixes since the 2.6.4 release
2014-11-12 15:23:04 +01:00
Christoph Holtermann
ea39d65372 Some doc for gncinvoicefkt.py 2014-11-12 15:08:57 +01:00
Christoph Holtermann
398fb96065 Doxygen doc extended for python invoice export 2014-11-12 14:54:56 +01:00