AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zufallsboolean

Ein Thema von Chemiker · begonnen am 13. Jul 2008 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
Seite 2 von 3     12 3   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Zufallsboolean

  Alt 14. Jul 2008, 05:59
Zitat von SirThornberry:
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen
result := Boolean(random(2));
Oh bitte nicht

Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Zufallsboolean

  Alt 14. Jul 2008, 12:49
Zitat von 1234588:
laut dem freepascal ref.pdf dokument ist eine variable des LongBool typs true, wenn sie einen wert hat, der nicht 0 ist. selbiges gilt bei ByteBool und WordBool. auszug aus dem besagten dokument:
Freepascal ist auch kein Delphi. Und ich würde einfach sagen, ein Vergleich führt zum selben Code, ist aber verständlicher und einfach schöner. Also warum lange casten?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Zufallsboolean

  Alt 14. Jul 2008, 19:44
Zitat von alzaimar:
Zitat von SirThornberry:
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen
result := Boolean(random(2));
Oh bitte nicht

Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.
Das gibt nur Probleme wenn man auf True und False prüft. Wenn man auf Wahr und Unwahr prüft gibt das keinerlei Probleme.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#14

Re: Zufallsboolean

  Alt 14. Jul 2008, 20:03
Zitat von SirThornberry:
Das gibt nur Probleme wenn man auf True und False prüft. Wenn man auf Wahr und Unwahr prüft gibt das keinerlei Probleme.
Zitat von Dax:
Wenn ich mich Recht erinnere, ist Boolean in Delphi sogar 0 oder 1. Ich glaube mich daran zu erinnern, dass Delphi aus dem "not" ein Integer "xor 1" macht - damit wäre "not Boolen(2)" immer noch true.
Zitat von alzaimar:
Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.
q.e.d.

Mal ehrlich: wenn es einen sauberen Weg gibt, sollte man ihn auch gehen, und nicht irgend einen dreckigen Seitenpfad, der verspricht, drei Meter kürzer zu sein.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Zufallsboolean

  Alt 14. Jul 2008, 21:16
Zitat von SirThornberry:
Zitat von alzaimar:
Zitat von SirThornberry:
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen
result := Boolean(random(2));
Oh bitte nicht

Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.
Das gibt nur Probleme wenn man auf True und False prüft. Wenn man auf Wahr und Unwahr prüft gibt das keinerlei Probleme.
Richtig. Das ist genau der Grund, wieso man Konstrukte à la if x = true then vermeiden sollte. IMO spricht nix gegen den typecast auf Boolean.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#16

Re: Zufallsboolean

  Alt 14. Jul 2008, 21:18
NL: Kompiliere bitte mal "a_bool := Boolean(2); b_bool := True; c_bool := a_bool xor b_bool;" und poste die Disassembly. Das würde mich echt mal interessieren, wie Delphi den Bool-Cast umsetzt...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Zufallsboolean

  Alt 14. Jul 2008, 21:48
Zitat von NamenLozer:
Richtig. Das ist genau der Grund, wieso man Konstrukte à la if x = true then vermeiden sollte. IMO spricht nix gegen den typecast auf Boolean.
Ach, echt?
Zitat von Mein kleines Testprogramm:
1. "If Boolan(2)" funktioniert
2. "If Boolan(2) or False" funktioniert
3. "If Boolan(2)=True" funktioniert NICHT
4. "If Boolan(2) and True" funktioniert NICHT
1 und 2 sind zu erwarten, 3 und 4 jedoch Disaster und Katastrophe in Einem (3 wird wg. 'Äquivalenz' benötigt und ist im Übrigen eine Elementaroperation und hat gefälligst zu funktionieren.

Findest Du das in Ordnung? Du kannst mit gecasteten Booleans einfach nicht arbeiten. Punkt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#18

Re: Zufallsboolean

  Alt 14. Jul 2008, 21:54
Okay, jetzt verstehe ich, was du meinst. XOR liefert ein falsches Ergebnis. (@dax)

Bei random(2) ist es aber trotzdem egal, weil eh nur 0 oder 1 herauskommen kann, und ich denke nicht, dass der Wert von True einafch so in der nächsten Delphiversion geändert wird. Wenn man natürlich auf 100%ige Kompatiblität wert legt, ist die IF SCHLEIFE wohl die bessere wahl.

Btw: mir fällt grad noch was ein:
x := boolean(random(2)*ord(True)); Ist allerdings schon ziemlich entwartet, aber ob das wirklich sinnvoll bzw. schneller ist, ist wohl fraglich. (Bei True=1 wird der Compiler die Multiplikation ja hoffentlich eh rausoptimieren).

edit: aber ist schon gut, ihr habt gewonnen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#19

Re: Zufallsboolean

  Alt 15. Jul 2008, 06:21
Zitat von NamenLozer:
Okay, jetzt verstehe ich, was du meinst. XOR liefert ein falsches Ergebnis. (@dax)
AND und '=' auch.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#20

Re: Zufallsboolean

  Alt 15. Aug 2008, 18:07
Hi,

Zitat von NamenLozer:
IF SCHLEIFE


@alzaimar: Da ist was dran. Ich denke folgendes Beispiel macht das mit =true besser verständlich:

Delphi-Quellcode:
var
  foo, bar: Boolean;

foo := <Funktion aus DLL die -1 (true in anderen Sprachen) zurückgibt>;
bar := <Funktion die 1 (derzeit true in Delphi) zurückgibt>;

if foo = bar then
  blubb; <-- wird nicht ausgeführt
Tja, true <> true, obwohl Äquivalenz vorliegt.

Notfalls würde folgendes helfen, solange feststeht, dass 0 = false:

Delphi-Quellcode:
function equivalent(b1, b2: Boolean): Boolean; inline;
begin
  Result := (b1 = false) = (b2 = false);
end;
Hauptsache, der Compiler optimiert das nicht.

Oder so:

Delphi-Quellcode:
function CorrectBool(b: boolean): boolean; inline;
begin
  Result := b <> false;
end;
Vllt sollte man dieses Thema aufsplitten. Ich sehe es schon kommen, dass es hier um drei Themen geht: Zufallsboolean, Boolean-Werte außerhalb [true, false] und if-ist-keine-schleife.

Mfg
FAlter
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
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 09:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz