[Gelöst] Eigene Floating-Point variablen, mit range-checking?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
UGerd
Lazarusforum e. V.
Beiträge: 18
Registriert: Fr 4. Mär 2011, 17:00
OS, Lazarus, FPC: Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
CPU-Target: 64Bit
Wohnort: Hamburg

[Gelöst] Eigene Floating-Point variablen, mit range-checking?

Beitrag von UGerd »

Hallo Gemeinde,

Ich übe gerade, ein größeres Projekt zu realisieren (Zeitenrechnung in Sekunden, wie in Unix). Ich verwende intensiv range-checking, um Fehler rechtzeitig zu bemerken. Z.B:

Code: Alles auswählen

TSecsInMin = 0..60;
Nun die Frage: lassen sich auch floating-Point Variablen neu definieren? Etwa so:

Code: Alles auswählen

TDTWinInSo = 36.526.0..72.686.0;
Zuletzt geändert von UGerd am Mi 14. Sep 2022, 17:46, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Eigene Floating-Point variablen, mit range-checking?

Beitrag von theo »

Nein, Subrange-Typen gibt es nur für ordinale Datentypen afaik.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Eigene Floating-Point variablen, mit range-checking?

Beitrag von Winni »

UGerd hat geschrieben:
Mi 14. Sep 2022, 10:02


Ich übe gerade, ein größeres Projekt zu realisieren (Zeitenrechnung in Sekunden, wie in Unix).
Hi!

Vorschlag:

Rechne mit Millisekunden wie GetTickCount64. Dann kannst Du mit 64-Bit-Integers arbeiten und mit Subranges nach Belieben arbeiten.

Winni

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Eigene Floating-Point variablen, mit range-checking?

Beitrag von wp_xyz »

UGerd hat geschrieben:
Mi 14. Sep 2022, 10:02

Code: Alles auswählen

TDTWinInSo = 36.526.0..72.686.0;
Was soll diese Syntax bedeuten? Sollen 36.526.0 und 72.686.0 Gleitkommazahlen sein? Mit jeweils zwei Dezimaltrennern? Oder ist der erste Punkt (der nach 36 und nach 72) jeweils ein Tausender-Trenner? Aber Tausender-Trenner sind Sache von Strings und haben in den Zahlen selbst nichts zu suchen... Oder vielleicht meinst du etwas ganz anderes.

Fragen über Fragen. Leute, gebt euch doch ein bisschen mehr Mühe, den Sachverhalt zu erklären.

UGerd
Lazarusforum e. V.
Beiträge: 18
Registriert: Fr 4. Mär 2011, 17:00
OS, Lazarus, FPC: Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
CPU-Target: 64Bit
Wohnort: Hamburg

Re: Eigene Floating-Point variablen, mit range-checking?

Beitrag von UGerd »

@wp_xyz

Sorry das war natürlich Blödsinn!

Es sollte heißen:

Code: Alles auswählen

TDTWinInSo = 36526.0..72686.0;
Also ein Range für floating - points. Es ging mir darum, eine Eingangskontrolle zu etablieren, beim Import von TDateTime aus z.B. TDatetimeEdit.

Meine Unit arbeitet nur mit Zeiten zwischen den Jahren 2000..2099.

@Winni

wp_xyz hat Recht: Ich hätte mir mehr Mühe geben können, worum es mir geht. Ich versuche es kurz:


Innerhalb meiner Unit wird nur mit ordinalen Typen gerechnet. Bis auf die Schnittstelle zu TDateTime. Ein wichtiges Konzept ist die Fehler-Prevention mittels Range-checking. Wäre jetzt elegant gewesen, wenn ranging von Datetime gäbe.
Ich werde wohl eine function schreiben, die eine Prüfung vornimmt.

Im Übrigen: Die Unit ist nicht fertig, es sind aber schon knapp 600 Zeilen. Für mich als Hobbyisten eine Herausforderung, aber bis jetzt läuft sie. Ich habe mir viel Mühe gegeben, eine Struktur aufzubauen, die mir hilft, den Überblick zu waren.

Falls es Interesse gibt, könnte ich die Unit hochladen, eine Diskussion mit Kennern würde ich mir wünschen.

Antworten