  # Leif Uneus

Members

67

37 Excellent

## Technical Information

• Delphi-Version
Delphi 10.4 Sydney

## Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

1. ## 32bit vs 64bit

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

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.
3. ## 32bit vs 64bit

At the time it was like a Concorde. Name a mean of travel that is faster for the public today.
4. ## 32bit vs 64bit

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.
5. ## I Broke Delphi ->> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error

@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;
6. ## I Broke Delphi ->> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error

@Fr0sT.Brutal Negative values will give the answer 10. But that is easily fixed.
7. ## I Broke Delphi ->> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error

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;
8. ## I Broke Delphi ->> Low bound exceeds high bound & Duplicate case label if you swap'em (Case Z of) Table error

Does not work for z = 0 though.
9. ## Function with 2 return values ?

Triple or triplet. See https://en.wikipedia.org/wiki/Tuple#Names_for_tuples_of_specific_lengths
10. ## Dynamic method call with record references

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
11. ## How to compile against ASM versions of System unit code?

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.
12. ## How to compile against ASM versions of System unit code?

What is your target platform? If it is Win32, the ASM version will be chosen.
13. ## Current VCLZip?

@uligerhardtHave you tried SynZip by Synopse?
14. ## Implement InfluxDB in Delphi

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.
15. Look at this Scimark Delphi implementation that includes a FFT library. https://github.com/philip-goh/scimark-delphi/blob/master/FFT.pas
×