Mark, frankly speaking packed decimal was my suspect since I saw the
difference. I saw the difference - it was intuitively clear that the
implementations of packed decimal is fundamentally different in C and C++
(however unclear why). What I'll do tomorrow, I'll write my own trivial
benchmark using decimal arithmetics.
Hopefully I shall see the difference.
The program uses decimal (15,0), decimal (15,9) and decimal (11,7) - It
seems that they all fit into 8 byte int.
I'll then see which is better - staying on C and decimals or switch to C++
On Feb 16, 2015 8:29 PM, "Mark S Waterbury" <mark.s.waterbury@xxxxxxxxxxxxx>
I just noticed near the bottom of your post, where you said:
Program makes a lot of calculations with packed decimal.
There is a big difference in the way ILE C implements support for "packed
decimal" as a "native" data type -- versus the way it is "supported" in ILE
C++ -- in ILE C, the compiler directly genrerates in-line code (in WCode /
NMI) to work on packed decimal data. In the ILE C++ compiler, support for
"packed decimal" is through a C++ library called "BCD" -- there are a lot
of macros and such defined in the QSYSINC/H include member named BCD ... if
you take a peek at that member, I think you will see that this uses
"operator overloading" in C++ to trick the compiler into calling the
desired library functions when operations are performed on "packed decimal"
This difference could easily account for the big differences you are
And then, you said:
... is there anything that can be done about it?
In C++, you could look into converting the packed decimal data into 64-bit
integers, and then performing any calculations using those long integers.
This would be much faster than using packed decimal arithmetic, then
convert back to packed decimal format, if needed. Or, just stick with ILE
C/400 for those programs that require doing a lot of packed decimal
Hope that helps,
Mark S. Waterbury