Leif Uneus
Members
Content Count
72 
Joined

Last visited
Community Reputation
40 ExcellentAbout Leif Uneus
 Currently Viewing Forums Index
Technical Information

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

In short, you want to remove all strings in brackets, including the brackets.

Algorithms. Irrational numer storage.Playing with 6 axis robot.
Leif Uneus replied to skyzoframe[hun]'s topic in Algorithms, Data Structures and Class Design
We have equipment for linear movement that is controlled by 4 nanometer precision. All controlled by stepper motors with the help of integers. Even though it is pascal, the programming language is not important. 
Algorithms. Irrational numer storage.Playing with 6 axis robot.
Leif Uneus replied to skyzoframe[hun]'s topic in Algorithms, Data Structures and Class Design
First of all, precision depends on the hardware. If you have a 6 axis movement, how accurate is the movement of all those axis? Secondly, how is the movement controlled? Resolution? Error in the resolution? Last in that chain comes the controlling equipment, speed and other things that might concern the precision. 
Threads can have different rounding modes. Raymond Chen. https://stackoverflow.com/q/72244777/576719 Are floating point operations deterministic when running in multiple threads? Some of your code may change the floating point settings, or even change them without restoring them. That goes for third party code in your program as well. And don´t get @David started with what dll's can surprise you with.

I wish the IDE could have a zoom option when displaying/editing forms.

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