Re: [Bulk] Re: C vs C++
Jevgeni Astanovski <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <CAJuVQr3vyK7AVXpERemeATqE4X0zQK_PFZHmm-O0O66mZBSv5w@mail.gmail.com> |
Somehow I thought, that long int is 64 bit. But it is not. So - who is? long long int, probably? On Mon, Feb 16, 2015 at 9:38 PM, Mark S Waterbury <[email protected]> wrote: > 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. > -- 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.