Re: [Bulk] Re: C vs C++
Mark S Waterbury <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <[email protected]> |
Jevgeni: I can pretty much guarantee that using 64-bit integers will always win "big time" over using packed decimal, even in ILE C/400, from a performance standpoint. All the more so, with ILE C++. Mark > On 2/16/2015 2:31 PM, Jevgeni Astanovski wrote: > 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++ > and integers... > > Thanks, > Jevgeni. > On Feb 16, 2015 8:29 PM, "Mark S Waterbury" <[email protected]> > wrote: > >> Jevjeni: >> >> 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" >> data. >> >> This difference could easily account for the big differences you are >> seeing. >> >> 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 >> arithmetic operations. >> >> Hope that helps, >> >> Mark S. Waterbury >> -- This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/c400-l or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] Before posting, please take a moment to review the archives at http://archive.midrange.com/c400-l.