Leif Uneus
Members
Content Count
67 
Joined

Last visited
Community Reputation
37 ExcellentTechnical Information

DelphiVersion
Delphi 10.4 Sydney
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.

Just for fun, read this article by W. Kahan and J.D. Darcy about the usefulness of extra precision. "How Java’s FloatingPoint Hurts Everyone Everywhere" https://people.eecs.berkeley.edu/~wkahan/JAVAhurt.pdf

No, I know what he meant. And from a discussion we had a couple of years ago I can only agree. I may have to rewrite the code eventually if I move to another platform, but until then I have a well working application.

At the time it was like a Concorde. Name a mean of travel that is faster for the public today.

I'm nobody. I still use the extended type, and I'm a developer of mathematical software. The algorithm was the only one that could be executed fast enough (and with the precision needed) in the days of Turbo Pascal. Sure, there are other algorithms today that has better performance without the extended types, but why invest time when it's still fully functional.

I Broke Delphi >> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error
Leif Uneus replied to Al T's topic in Algorithms, Data Structures and Class Design
@Fr0sT.Brutal The algo is using floating point values, hence the bad performance. I made a mistake in my previous code. There is a gap between MaxLongInt and the next upper boundry. Your code suffers from that too. Test with AltCntCaseTbl2(Int64(MaxLongInt)+1) Here is my correction: function AltCntCaseTbl(v : Int64) : Int64; inline; begin if (v <= MaxLongInt) then begin if (v >= 1000000000) then Exit(10); if (v >= 100000000) then Exit(9); if (v >= 10000000) then Exit(8); if (v >= 1000000) then Exit(7); if (v >= 100000) then Exit(6); if (v >= 10000) then Exit(5); if (v >= 1000) then Exit(4); if (v >= 100) then Exit(3); if (v >= 10) then Exit(2); if (v >= 0) then Exit(1); Exit(0); end; if (v >= 1000000000000000000) then Exit(19); if (v >= 100000000000000000) then Exit(18); if (v >= 10000000000000000) then Exit(17); if (v >= 1000000000000000) then Exit(16); if (v >= 100000000000000) then Exit(15); if (v >= 10000000000000) then Exit(14); if (v >= 1000000000000) then Exit(13); if (v >= 100000000000) then Exit(12); if (v >= 10000000000) then Exit(11); Exit(10); end; 
I Broke Delphi >> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error
Leif Uneus replied to Al T's topic in Algorithms, Data Structures and Class Design
@Fr0sT.Brutal Negative values will give the answer 10. But that is easily fixed. 
I Broke Delphi >> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error
Leif Uneus replied to Al T's topic in Algorithms, Data Structures and Class Design
Almost a magnitude faster algorithm: function AltCntCaseTbl( v : Int64) : Int64; inline; begin if (v < 0) then Exit(0); if (v > MaxLongInt) then begin if (v >= UInt64(10000000000000000000)) then Exit(20); if (v >= UInt64(1000000000000000000)) then Exit(19); if (v >= UInt64(100000000000000000)) then Exit(18); if (v >= UInt64(10000000000000000)) then Exit(17); if (v >= UInt64(1000000000000000)) then Exit(16); if (v >= UInt64(100000000000000)) then Exit(15); if (v >= UInt64(10000000000000)) then Exit(14); if (v >= UInt64(1000000000000)) then Exit(13); if (v >= UInt64(100000000000)) then Exit(12); if (v >= UInt64(10000000000)) then Exit(11); end; if (v >= UInt64(1000000000)) then Exit(10); if (v >= UInt64(100000000)) then Exit(9); if (v >= UInt64(10000000)) then Exit(8); if (v >= UInt64(1000000)) then Exit(7); if (v >= UInt64(100000)) then Exit(6); if (v >= UInt64(10000)) then Exit(5); if (v >= UInt64(1000)) then Exit(4); if (v >= UInt64(100)) then Exit(3); if (v >= UInt64(10)) then Exit(2); Result := 1; end; 
I Broke Delphi >> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error
Leif Uneus replied to Al T's topic in Algorithms, Data Structures and Class Design
Does not work for z = 0 though. 
Function with 2 return values ?
Leif Uneus replied to Henry Olive's topic in RTL and Delphi Object Pascal
Triple or triplet. See https://en.wikipedia.org/wiki/Tuple#Names_for_tuples_of_specific_lengths 
Dynamic method call with record references
Leif Uneus replied to Andre1's topic in RTL and Delphi Object Pascal
const records with size less or equal to a pointer is passed by value. But there is an exception since Delphi Rio. A record larger than 4 bytes is passed by reference on all platforms. See https://stackoverflow.com/a/53697759/576719 
How to compile against ASM versions of System unit code?
Leif Uneus replied to kaarigar's topic in RTL and Delphi Object Pascal
The PUREPASCAL Pos code in Delphi 11 has been changed to a more optimised version, in fact the same code that the ASM version is based on. Using the PUREPASCAL version even in WIN32 would give the same execution speed as the ASM version. 
How to compile against ASM versions of System unit code?
Leif Uneus replied to kaarigar's topic in RTL and Delphi Object Pascal
What is your target platform? If it is Win32, the ASM version will be chosen. 
@uligerhardtHave you tried SynZip by Synopse?

Hi Nizarazu, I did that two years ago. Had to correct some leaks from the github source and added more features. All I did to make it work was to install a graphic tool from Influx and make sure that real time data was flushed to my computer. Some Influx databases were also opened up for remote access. From there I was able to implement the same operations in a sample Delphi project. We are hosting a cloud service, where real time data from thousands of monitors and sensors are pushed into a central database. From there, data is validated, stored and pushed out again to the service subscribers. On site, reports and forecasts are made and presented. Most of the real time streaming and primary storage are made by InfluxDB tools. Validation, reports and presentation is mostly built with Delphi. We are planning to expand the Delphi tooling to avoid middle layers in connection to streaming in the near future. /Leif Edit: There is also a Delphi tool called QuickLogger that supports InfluxDB. See https://github.com/exilon/QuickLogger. Also available from Delphi GetIt Package Manager.

Look at this Scimark Delphi implementation that includes a FFT library. https://github.com/philipgoh/scimarkdelphi/blob/master/FFT.pas