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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.