mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
check for overflows in the remainder calculations ...
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10124 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
812fbb094f
commit
5a101b3354
@ -792,47 +792,88 @@ gnc_numeric_convert(gnc_numeric in, gint64 denom, gint how)
|
||||
break;
|
||||
|
||||
case GNC_HOW_RND_ROUND_HALF_DOWN:
|
||||
if(denom_neg) {
|
||||
if((2 * remainder) > in.denom*denom) {
|
||||
if(denom_neg)
|
||||
{
|
||||
if((2 * remainder) > in.denom*denom)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
}
|
||||
else if((2 * remainder) > temp.denom) {
|
||||
else if((2 * remainder) > temp.denom)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
/* check that 2*remainder didn't over-flow */
|
||||
else if (((2 * remainder) < remainder) &&
|
||||
(remainder > (temp.denom / 2)))
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case GNC_HOW_RND_ROUND_HALF_UP:
|
||||
if(denom_neg) {
|
||||
if((2 * remainder) >= in.denom*denom) {
|
||||
if(denom_neg)
|
||||
{
|
||||
if((2 * remainder) >= in.denom*denom)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
}
|
||||
else if((2 * remainder ) >= temp.denom) {
|
||||
else if((2 * remainder ) >= temp.denom)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
/* check that 2*remainder didn't over-flow */
|
||||
else if (((2 * remainder) < remainder) &&
|
||||
(remainder >= (temp.denom / 2)))
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case GNC_HOW_RND_ROUND:
|
||||
if(denom_neg) {
|
||||
if((2 * remainder) > in.denom*denom) {
|
||||
if(denom_neg)
|
||||
{
|
||||
if((2 * remainder) > in.denom*denom)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
else if((2 * remainder) == in.denom*denom) {
|
||||
if(out.num % 2) {
|
||||
else if((2 * remainder) == in.denom*denom)
|
||||
{
|
||||
if(out.num % 2)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if((2 * remainder ) > temp.denom) {
|
||||
else
|
||||
{
|
||||
if((2 * remainder ) > temp.denom)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
else if((2 * remainder) == temp.denom) {
|
||||
if(out.num % 2) {
|
||||
/* check that 2*remainder didn't over-flow */
|
||||
else if (((2 * remainder) < remainder) &&
|
||||
(remainder > (temp.denom / 2)))
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
else if((2 * remainder) == temp.denom)
|
||||
{
|
||||
if(out.num % 2)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
}
|
||||
/* check that 2*remainder didn't over-flow */
|
||||
else if (((2 * remainder) < remainder) &&
|
||||
(remainder == (temp.denom / 2)))
|
||||
{
|
||||
if(out.num % 2)
|
||||
{
|
||||
out.num = out.num + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user