r16633 - gnucash/trunk - reintroduce some rounding into basis calculations to prevent overflow on particularly large accounts.

Andrew Sackville-West andrewsw at cvs.gnucash.org
Mon Dec 10 15:53:42 EST 2007


Author: andrewsw
Date: 2007-12-10 15:53:42 -0500 (Mon, 10 Dec 2007)
New Revision: 16633
Trac: http://svn.gnucash.org/trac/changeset/16633

Modified:
   gnucash/trunk/
   gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm
Log:
 reintroduce some rounding into basis calculations to prevent overflow on particularly large accounts.
 



Property changes on: gnucash/trunk
___________________________________________________________________
Name: svk:merge
   - 3889ce50-311e-0410-a464-f059747ec5d1:/local/gnucash/branches/swig-redo:802
3889ce50-311e-0410-a464-f059747ec5d1:/local/gnucash/trunk:1037
57a11ea4-9604-0410-9ed3-97b8803252fd:/gnucash/branches/gobject-engine-dev-warlord:15827
95e783b2-15b2-415a-8f58-462a736813e0:/gnucash/advport:14
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/branches/gobject-engine-dev-warlord:14369
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/branches/gobject-engine-dev-warlord1:14446
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/trunk:14601
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/trunk2:15116
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/trunk3:15249
   + 3889ce50-311e-0410-a464-f059747ec5d1:/local/gnucash/branches/swig-redo:802
3889ce50-311e-0410-a464-f059747ec5d1:/local/gnucash/trunk:1037
57a11ea4-9604-0410-9ed3-97b8803252fd:/gnucash/branches/gobject-engine-dev-warlord:15827
95e783b2-15b2-415a-8f58-462a736813e0:/gnucash/advport:16
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/branches/gobject-engine-dev-warlord:14369
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/branches/gobject-engine-dev-warlord1:14446
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/trunk:14601
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/trunk2:15116
d2ab10a8-8a95-4986-baff-8d511d9f15b2:/local/gnucash/trunk3:15249

Modified: gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm
===================================================================
--- gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm	2007-12-10 19:01:53 UTC (rev 16632)
+++ gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm	2007-12-10 20:53:42 UTC (rev 16633)
@@ -225,24 +225,22 @@
 	  ((average-basis) 
            (if (not (eqv? b-list '()))
                (list (cons (gnc-numeric-add b-units
-						(caar b-list) GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
+						(caar b-list) 10000 GNC-RND-ROUND) 
                            (gnc-numeric-div
                             (gnc-numeric-add b-value
                                              (gnc-numeric-mul (caar b-list)
                                                               (cdar b-list) 
-								  GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER))
-						 GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER))
+								  10000 GNC-RND-ROUND)
+						 10000 GNC-RND-ROUND)
                             (gnc-numeric-add b-units
-						 (caar b-list) GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER))
-				GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER))))
+						 (caar b-list) 10000 GNC-RND-ROUND)
+				10000 GNC-RND-ROUND)))
                (append b-list 
                        (list (cons b-units (gnc-numeric-div
-						b-value b-units GNC-DENOM-AUTO 
-						(logior GNC-DENOM-REDUCE GNC-RND-NEVER)))))))
+						b-value b-units 10000 GNC-RND-ROUND))))))
 	  (else (append b-list 
                         (list (cons b-units (gnc-numeric-div
-						 b-value b-units GNC-DENOM-AUTO 
-						 (logior GNC-DENOM-REDUCE GNC-RND-NEVER)))))))
+						 b-value b-units 10000 GNC-RND-ROUND))))))
 	(if (not (eqv? b-list '()))
 	    (case b-method
 	      ((fifo-basis) 
@@ -250,11 +248,11 @@
                                (gnc-numeric-abs b-units) (caar b-list))))
                    (basis-builder (cdr b-list) (gnc-numeric-add
                                                 b-units 
-						    (caar b-list) GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
+						    (caar b-list) 10000 GNC-RND-ROUND) 
                                   b-value b-method)
                    (append (list (cons (gnc-numeric-add
                                         b-units 
-					    (caar b-list) GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
+					    (caar b-list) 10000 GNC-RND-ROUND) 
                                        (cdar b-list))) (cdr b-list))))
 	      ((filo-basis) 
                (if (not (= -1 (gnc-numeric-compare
@@ -263,16 +261,16 @@
                                   (gnc-numeric-add
                                    b-units 
                                    (caar (reverse b-list)) 
-				       GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
+				       10000 GNC-RND-ROUND) 
                                   b-value b-method)
                    (append (cdr (reverse b-list)) 
                            (list (cons (gnc-numeric-add
                                         b-units 
-					    (caar (reverse b-list)) GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
+					    (caar (reverse b-list)) 10000 GNC-RND-ROUND) 
                                        (cdar (reverse b-list)))))))
 	      ((average-basis) 
                (list (cons (gnc-numeric-add
-				(caar b-list) b-units GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
+				(caar b-list) b-units 10000 GNC-RND-ROUND) 
                            (cdar b-list)))))
 	    '()
 	    )
@@ -280,13 +278,13 @@
 	;; this is a split/merge...
 	(let* ((current-units (units-basis b-list))
 	       (units-ratio (gnc-numeric-div current-units 
-					     (gnc-numeric-add b-units current-units GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
-					     GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER))))
+					     (gnc-numeric-add b-units current-units 10000 GNC-RND-ROUND) 
+					     10000 GNC-RND-ROUND)))
 	  
 	  (define (apply-ratio blist ratio)
 	    (if (not (eqv? blist '()))
-		(cons (cons (gnc-numeric-div (caar blist) ratio GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER)) 
-			    (gnc-numeric-mul ratio (cdar blist) GNC-DENOM-AUTO (logior GNC-DENOM-REDUCE GNC-RND-NEVER))) 
+		(cons (cons (gnc-numeric-div (caar blist) ratio 10000 GNC-RND-ROUND) 
+			    (gnc-numeric-mul ratio (cdar blist) 10000 GNC-RND-ROUND)) 
 		      (apply-ratio (cdr blist) ratio ))
 		'()
     )



More information about the gnucash-changes mailing list