AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein gerundete Zahlen werden nicht weiterverarbeitet

gerundete Zahlen werden nicht weiterverarbeitet

Ein Thema von vitapower · begonnen am 10. Okt 2012 · letzter Beitrag vom 11. Okt 2012
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

AW: gerundete Zahlen werden nicht weiterverarbeitet

  Alt 11. Okt 2012, 12:19
Man kann die "Gleichheit" von zwei Real-Zahlen auch so testen:

Delphi-Quellcode:
var
   a, b // die zu vergleichenden Werte
   epsilon: Real;

epsilon := 1e-8; // irgendeine Genauigkeit (hier 10^-8)

if abs(a-b) < epsilon then showmessage('a und b sind gleichgroß');
Gruß
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#2

AW: gerundete Zahlen werden nicht weiterverarbeitet

  Alt 11. Okt 2012, 13:16
Statt dem manuellen Vergleich, kann man auch gleich die passenden Funktionen nutzen, da sieht man dann eher, was gemacht wird.
Delphi-Referenz durchsuchenIsZero Delphi-Referenz durchsuchenSameValue Delphi-Referenz durchsuchenCompareValue Delphi-Referenz durchsuchenSign Delphi-Referenz durchsuchenInRange

zu IsZero:
0 ist zwar einer der wenigen Werte, welche man theoretisch direkt vergleichen könnte, aber wenn die 0 das Ergebnis einer Berechnung ist, dann muß es ja nicht ganz genau 0 sein.
z.B.: 18 - fast genau 18 = nur fast 0
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2012 um 13:19 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: gerundete Zahlen werden nicht weiterverarbeitet

  Alt 11. Okt 2012, 16:44
Man kann die "Gleichheit" von zwei Real-Zahlen auch so testen:

Delphi-Quellcode:
var
   a, b // die zu vergleichenden Werte
   epsilon: Real;

epsilon := 1e-8; // irgendeine Genauigkeit (hier 10^-8)

if abs(a-b) < epsilon then showmessage('a und b sind gleichgroß');
Gruß
Genau um so etwas nicht per Hand zu programmieren, sind die von himitsu aufgelisteten Funktionen da. Denn diese 'irgendeine Genauigkeit' ist nicht so einfach vorzugeben. Wenn Du im Nanometerbereich arbeitest, dann ist dein epsilon viel zu groß, bei Lichtjahren allerdings viel zu klein (Basiseinheit Meter).

Da ist 'SameValue' mit dem defaultwert 'epsilon=0' schon pfiffiger. Schau Dir mal den Quelltext an.
  Mit Zitat antworten Zitat
vitapower

Registriert seit: 8. Okt 2012
3 Beiträge
 
#4

AW: gerundete Zahlen werden nicht weiterverarbeitet

  Alt 11. Okt 2012, 19:20
Habe mit integer gelöst, war die einfachste Lösung.
Vielen Dank an alle!!!!!
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz