Deutsch
Wünsche und Anregungen

Wunsch: Neuer relationaler Operator "ungefähr"

 
- Seite 1 -



Frank
Abbing
Ich wünsche mir (in erster Linie für Floats) den neuen relationalen Operator: Ungefähr bzw. Fast gleich. Also quasi ein Gleichheitszeichen mit einer frei einstellbaren Toleranz, z.B.:

~=

oder

><

Und dazu eine Funktion, um den Toleranzwert (in positiver und gleichzeitig auch negativer Richtung) zu setzen, wie z.B.:

Set(About, 0.0001)

Das ganze wäre auch sinnvoll für Integer-Zahlen. In dem Fall setzt man eben ganzzahlige Werte:

Set(About,3)

Hierzu bitte auch lesen: [web]https://www.rgh-soft.de/forum01/read.php?f=7&i=12824&t=12824[/web] und [web]https://de.wikipedia.org/wiki/Gleichheitszeichen[/web]
 
08.11.2007  
 



 
- Seite 2 -



Jörg
Sellmeyer

KompilierenMarkierenSeparieren
Ok, der Vergleich mit der Ganzzahl war etwas zu kurz gesprungen.
Im Prinzip macht meine Funktion aber genau das, was Rolands oder Deine Konstruktion auch machen.
KompilierenMarkierenSeparieren
Proc RoundAbout

    Parameters F!,n%,F2!
    Declare r%
    r% = (Round(F!,n%) = Round(F2!,n%))
    Print Str$(F!) +  =  + Str$(F2!) + :  + Str$(r%)
    Print Str$(Round(F!,n%)) +  =  + Str$(Round(F2!,n%)) + :  + Str$(r%)
    Return r%

EndProc

WhileLoop 10

    print RoundAbout(1.573525,&Loop,1.573527),&Loop

Wend

WaitInput
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.11.2007  
 




Frank
Abbing
Diese Lösungen gehen natürlich, aber sie sind allesamt nicht effizient. Ein zusätzlicher relationaler Operator wäre sicher leicht einzubauen und würde nicht weiter stören.
Mich persönlich würden solche rudimentären Erweiterungen glücklicher machen als die x-te Zusammenfassung von 2-3 APIs. Aber bitte...
 
13.11.2007  
 




RGH
Einen neuen Operator, der in der Mathematik völlig unbekannt ist, halte ich für wenig hilfreich.

Eher könnte ich mir eine Set-Funktion vorstellen, mit der ich die Genauigkeit von Float-Vergleichen einstellen kann, etwa Set(IrgendeinSinnvollerName, 7).
Auch sinnvoll wäre vielleicht eine Funktion Test(wert!, von!, bis!), mit der überprüft wird, ob ein Wert zwischen den genannten Grenzen liegt.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
13.11.2007  
 




Frank
Abbing

Einen neuen Operator, der in der Mathematik völlig unbekannt ist, halte ich für wenig hilfreich.


Trend-Setting gehört wohl nicht zu deinen Stärken.
Wie auch immer, deine Vorschläge scheinen mir zumindest ein wenig entgegen zu kommen und ich würde deren Einbau daher natürlich begrüssen.
 
14.11.2007  
 




Michael
Wodrich

Einen neuen Operator, der in der Mathematik völlig unbekannt ist, halte ich für wenig hilfreich.


Als Operator mag das ja stimmen, aber in sehr vielen Quellcodes geistern die Gamma-Korrekturwerte herum. Da könnte man sich mit Franks Wunsch so einiges verbessern....

Nur weil die Mathematiker noch nicht auf so eine Lösung gekommen sind muß sie ja nicht schlecht sein..

Wie wäre es mit Toleranz für Set und Funktion..... (engl.. Tolerance)

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
16.11.2007  
 




Frank
Abbing

Als Operator mag das ja stimmen, aber in sehr vielen Quellcodes geistern die Gamma-Korrekturwerte herum. Da könnte man sich mit Franks Wunsch so einiges verbessern....

Nur weil die Mathematiker noch nicht auf so eine Lösung gekommen sind muß sie ja nicht schlecht sein..


Endlich mal Zustimmung. Die Was-der-Bauer-nicht-kennt-isst-er-nicht-Haltung hier im Thread fand ich auch schon etwas erschreckend.
 
16.11.2007  
 




RGH
Ich habe mir mal ausführliche Gedanken zu einem ungefähren Vergleich gemacht:

Zuallererst: Ich sehe ein, dass so etwas für mancherlei Zwecke sinnvoll ist und von daher auch möglichst flexibel sein sollte.

Allerdings scheiden daher einige der hier vorgeschlagenen Lösungen aus:
Gleichheitszeichen durch Set-Funktion gesteuert: Das wäre zwar flexibel handhabbar, macht den Code aber schwieriger zu lesen. Wenn man eine eine Prozedur betrachtet, weiß man nie, was das = denn nun bedeutet: Gleicheit oder nur eine irgendwie geartete Ähnlichkeit der Werte. Da müsste man schon den ganzen Code durchsuchen, ob irgendwo eine entsprechende Set-Funktion steht und welche dieser Funktionen bei Aufruf der Prozedur gerade gültig sind. Gleich sollte schon Gleich bedeuten.
Ein neuer Operator, etwa ~: Damit dieser flexibel handhabbar wäre, müßte der Grad der Genauigkeit des Vergleichs auch hier über eine Set-Funktion eingestellt werden, so dass dieser das gleiche Problem wie das erweiterte Gleichheitszeichen hat, mit dem Unterschied, dass man nun weiß, dass die exakte Gleichheit hier vermutlich nicht in Frage kommt.

Als Lösung bietet sich daher eine neue Funktion an: etwa nearly(wert1!, wert2!, genauigkeit%) wobei Genauigkeit die gleiche Bedeutung wie bei round(wert!, genauigkeit%) hat, und die Anzahl der Nachkommastellen angibt, die beim Vergleich wirken. Diese Zahl kann auch negativ sein, um etwa bei großen Zahlen die hinteren Stellen nicht zu berücksichtigen. nearly(5,999, 6,004, 2) würde dann 1 (=wahr) ergeben, da beide Werte auf 2 Stellen gerundet gleich sind, nämlich 6,00.
Parallel dazu wäre etwa die Funktion between(wert!, von!, bis!) denkbar, die 1 zurückggibt wenn wert! zwischen von! und bis! liegt: von! <= wert! <= bis!
Abrunden könnte man das Ganze noch mit range(wert!, min!, max!), das den Wert auf die Grenzen beschneidet, also min! zurückgibt, wenn der Wert kleiner als min! ist und max! zurückgibt, wenn er größer als max! ist. Liegt er dazwischen, wird er unverändert zurückgegeben.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
18.11.2007  
 



Jau das riecht auch schon fast nach einer Intersektionskontrolle für Rechtecke, quasi zwei betweens, somit könnte man eine proc aus 7 Zeilen in eine proc aus 5 Zeilen umschreiben. Vielleicht bringst Du dem between aber auch auch noch optionale Mehrparameter bei:
KompilierenMarkierenSeparieren
if between(x!,y!,10,10,200,200)//prüft ob Punkt x! y! im Rechteck 10,10 - 200,200 liegt

    if between(x!,y!,x!+50,y!+50,10,10,200,200)// prüft ob Rechteck x! y! - x!+50 y!+50 im Rechteck 10 10 200 200 liegt.


Das range begrüsse ich ebenfalls sehr!
 
18.11.2007  
 




Michael
Wodrich
between
betweenXY
betweenXYZ

Dann hätten wir sie gleich alle.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
20.11.2007  
 



Genau XYZ hatte ich glatt vergessen!
 
20.11.2007  
 




Jac
de
Lad
Dann bau bitte gleich noch Ceil ein, das vermisse ich schon lange!
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
20.11.2007  
 



Vielleicht sollten wir einfach ein Rechteck zeichnen und die Mitglieder darauf abbilden.
 
20.11.2007  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

11.605 Betrachtungen

Unbenanntvor 0 min.
Walter03.12.2020
iF01.12.2014
holmol9330.05.2013
RICOSCH29.11.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie