[DUG] Int64 or floating point faster?
Jolyon Smith
jsmith at deltics.co.nz
Mon Aug 18 11:25:47 NZST 2014
That would be odd since the IEEE single and double types were introduced in
TP 5.0 and use of these was always dependent on having a math co-pro.
Perhaps it was the "real" type ? I'm not sure how that was implemented
'under the hood' back in the day (although these days it's just a synonym
for Double) although with a range of 1E-32 to 1E+38, an int32.int32 pair
wouldn't have worked (and iirc it was a 48-bit type anyway, hence it lives
[lived?] on as Real48 for people who really need/want it).
I am interested to find out more about this elusive type as I'd be curious
to see how it was implemented (I find this sort of thing fascinating). :)
On 18 August 2014 10:50, Pieter De Wit <pieter at insync.za.net> wrote:
> Hey Jolyon,
>
>
>
> I was also under the impression it was a double int. I am damn sure it was
> documented like this for Pascal 5.5. Even if I can find it now, it doesn't
> matter since I think we have proved that Delphi uses the IEEE std :)
>
>
>
> Cheers,
>
>
>
> Pieter
>
>
>
> On 18/08/2014 08:47, Jolyon Smith wrote:
>
> @Cameron, you appear to be confused.
>
> Yes, Delphi uses a standard implementation of single and double types -
> the IEEE standards. But I don't know where you got the idea that this
> standard involves a naive pairing of two ints (of any size). Floating
> point types are *far* more complex than that. e.g. the internal
> representation of the value "1" in Double is not (0x00000001).(0x00000000)
> but (0x3fff0000).(0x00000000)
>
> How would I describe it otherwise ? Why, the same way that IEEE 754
> describes it of course. ;)
>
> http://en.wikipedia.org/wiki/Double-precision_floating-point_format
>
> Single is similarly not a naive pairing of two int16's. In fact, the
> closest I can even think that Delphi has to such a limited implementation
> for decimal values is the Curreny type, but even that isn't a "pair of
> integers", rather a straightforward "fixed point" with a scalar of 10,000,
> yielding 4 fixed decimal places.
>
>
> Back to the OP...
>
> If you are using Delphi 7 and were thinking of using Single precision,
> then I strongly recommend that you do some tests with some representative
> sample data to establish the most efficient approach, but as a rule of
> thumb I would expect to find that Single precision would be more efficient
> than Double (and in the older.Win32 compilers I wouldn't be surprised if
> these had an even greater performance advantage over Int64). The question
> then is whether Single precision is adequate for your needs or if you need
> the additional capacity of Double.
>
> If you are inclined toward Int64 for some reason, be aware that there was
> a bug in the Delphi Int64 arithmetic in older Delphi versions. The 32-bit
> compiler doesn't use hardware op-codes for Int64 operations but emulates
> these in software, which is why Int64 performs less well than Double:
>
> I'm fairly sure this is the case even today (hence the comparative
> performance of Double and Int64 even in the XE4 32-bit compiler), but
> absolutely certain that it is the case with the older Delphi compilers.
>
> The details of the bug escape my memory right now, other than that it was
> a basic arithmetic error in the compiler emitted code (and something of an
> edge case), rather than a bug in an RTL function. i.e. not something that
> can be easily avoided.
>
> But I am sure your tests will show that Single or Double are more
> efficient anyway.
>
>
> On 17 August 2014 20:09, Cameron Hart <Cameron.Hart at flowsoftware.co.nz>
> wrote:
>
>> I'm confused now as I'm pretty sure Delphi uses a standard format to
>> represent float (the same format used anywhere else for that matter). In
>> which case a float is essentially two int32 (or other int's depending on
>> the scale of the float). Ie a single used two int16.
>>
>>
>>
>> One int represented the mantissa the other the exponent (in essence the
>> decimal portion). Together they resulted in the floating point value.
>>
>>
>>
>> How would you describe this otherwise?
>>
>>
>>
>>
>>
>> *From:* delphi-bounces at listserver.123.net.nz [mailto:
>> delphi-bounces at listserver.123.net.nz] *On Behalf Of *Jolyon Smith
>> *Sent:* Sunday, 17 August 2014 12:54 p.m.
>>
>> *To:* NZ Borland Developers Group - Delphi List
>> *Subject:* Re: [DUG] Int64 or floating point faster?
>>
>>
>>
>>
>>
>> That's curious. Who are "they" ? It doesn't sound like any floating
>> point implementation I ever came across in Delphi (or anywhere else, for
>> that matter). O.o
>>
>>
>>
>> On 17 August 2014 12:28, Pieter De Wit <pieter at insync.za.net> wrote:
>>
>> Hi Jolyon,
>>
>> >From memory, they used 2 int32's to make a float - this could have been
>> int16's - memory is very vague on this :) The one was used to represent the
>> whole numbers and the other was to show the decimal numbers
>>
>> Cheers,
>>
>> Pieter
>>
>>
>>
>> On 17/08/2014 12:05, Jolyon Smith wrote:
>>
>> @Pieter - I don't understand what you mean when you say that "float was
>> int32.int32". For starters, "float" is an imprecise term. If you mean
>> "single" then the entire value was always 32 bit in it's entirety. If you
>> mean double then it was always 64 bit. What is this "in32.int32" type of
>> which you speak ? O.o
>>
>>
>>
>> On 17 August 2014 11:52, Jolyon Smith <jsmith at deltics.co.nz> wrote:
>>
>> I think there are too many variables involved to give an answer to this
>> question without some of those variables being reduced to known values.
>>
>> e.g. what hardware ? what version of Delphi ? x64 target or x86 ?
>> what precision of floating point ?
>>
>> Having said that, in a quick test knocked up in my Smoketest framework I
>> found that Double comfortably outperforms Int64 when compiling for Win32
>> but that both Double and Int64 demonstrated improved performance when
>> compiling for Win64 and that whilst Double still showed some advantage it
>> was not as significant (and in some test runs the difference was
>> negligible).
>>
>> If you are targeting FireMonkey you will have to bear in mind that the
>> back-end compiler is different to the x86/x64 backend, so results obtained
>> using the WinXX compilers will not necessarily be indicative of performance
>> on the ARM or LLVM platforms.
>>
>>
>>
>> Conditions:
>>
>>
>> - Delphi XE4
>>
>> - Running in a 64-bit Win 7 VM
>>
>> - No testing was done for correctness of the results.
>>
>>
>>
>>
>>
>>
>>
>> On 16 August 2014 15:30, Ross Levis <ross at stationplaylist.com> wrote:
>>
>> Would I be correct that int64 multiplications would be faster than
>> floating point in Delphi? My app needs to do several million.
>>
>>
>>
>>
>>
>> _______________________________________________
>> NZ Borland Developers Group - Delphi mailing list
>> Post: delphi at listserver.123.net.nz
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
>> Subject: unsubscribe
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>>
>> NZ Borland Developers Group - Delphi mailing list
>>
>> Post: delphi at listserver.123.net.nz
>>
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>>
>> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with Subject: unsubscribe
>>
>>
>>
>>
>> _______________________________________________
>> NZ Borland Developers Group - Delphi mailing list
>> Post: delphi at listserver.123.net.nz
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
>> Subject: unsubscribe
>>
>>
>>
>> _______________________________________________
>> NZ Borland Developers Group - Delphi mailing list
>> Post: delphi at listserver.123.net.nz
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
>> Subject: unsubscribe
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with Subject: unsubscribe
>
>
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
> Subject: unsubscribe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20140818/20608037/attachment.html
More information about the Delphi
mailing list