Schrift
[thread]8896[/thread]

RDW 2007/8 -- Aprilscherz (Seite 3)

Leser: 2


<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten
GoodFella
 2007-04-03 12:03
#75608 #75608
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Hattest Recht, AND funktioniert genausowenig bei grossen Zahlen wie Modulo.
Ich glaube das erst, wenn ich ein Gegenbeispiel gesehen habe, doc, denn auch ich hatte mal Informatik in der Schule und das binäre Zahlensystem und Speicherung auf dem PC habe ich zur genüge gehabt. ;)
docsnyder
 2007-04-03 13:24
#75609 #75609
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@GoodFella

Eine Diskussion, welche die nicht-Portabilität der "&"-Lösung aufzeigt, findest Du hier: http://www.thescripts.com/forum/thread534058.html

Die folgende Aussage:

Quote
There are systems where bit 0 is the high order or sign bit, not the low order one.

findest Du hier: http://www.thescripts.com/forum/thread216600.html

Gruss, Doc
murphy
 2007-04-03 16:06
#75610 #75610
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=docsnyder,03.04.2007, 11:24][...]
Die folgende Aussage:

Quote
There are systems where bit 0 is the high order or sign bit, not the low order one.

findest Du hier: http://www.thescripts.com/forum/thread216600.html
[...][/quote]
Diese Aussage ist zwar korrekt, hat aber nichts damit zu tun, ob AND funktioniert, oder nicht: Wenn alle Zahlen mit einem Vorzeichen im niederwertigsten Bit gespeichert werden, oder von mir aus in völlig durchgewürfelter Reihenfolge der Bits, so werden trotzdem *beide* Operanden des AND-Operators in diesem Format abgelegt. Es ist ja nicht so, dass eine beliebige Zahl intern in einem komischen Format abgespeichert wird, die 1 aber intern immer ein Wort mit gesetztem niedrigsten Bit währe. Die 1 ist genauso eine Zahl wie jede andere und liegt folglich im gleichen Format wie jede andere vor. Deswegen funktioniert die Überprüfung auf gerade oder ungerade mit AND immer -- sofern nicht aus irgendeinem Grunde die beiden Operanden *unterschiedliche* Speicherformate haben.

Das war es auch eigentlich, was ich mit meinem ersten Beitrag zu diesem Thema meinte. Ich hatte nur übersehen, neben der Speicherung in Fließkomma oder Netzwerkformaten die Speicherung negativer Zahlen als Beispiel für ein eventuell abweichendes Format anzuführen.

Ich denke wir können festhalten, dass die Methode ($x & 1 ? 'ungerade' : 'gerade') genau dann zuverlässig funktioniert, wenn eine der folgenden Aussagen zutrifft:

* $x ist ein positiver Integer, der in ein Maschinenwort passt

* $x ist ein negativer Integer, der in ein Maschinenwort passt, und auf der aktuellen Architektur werden negative Integer lediglich durch ein Signum-Bit gekennzeichnet

* $x ist ein negativer Integer, der in ein Maschinenwort passt, und auf der aktuellen Architektur werden negative Integer als Zweierkomplement ihres Betrages dargestellt.

Mir fällt zwar keine Architektur ein, auf der nicht mindestens eine dieser Aussagen zutrifft, solange der Betrag von $x klein genug ist, aber erstens könnte der Betrag von $x durchaus auch größer werden und zweitens ist ja nicht gesagt, dass man überhaupt einen Integer im numerischen Teil des Skalares $x vorliegen hat.

@DocSnyder: Ich glaube, wir meinen eigentlich das gleiche, reden aber irgendwie aneinander vorbei. Ich wollte nicht Deine Aussage an sich in Frage stellen, mir gefiel nur Deine Begründung nicht bzw. ich habe sie falsch verstanden. Falls ich mich bei meiner Antwort im Ton vergriffen habe, so tut mir das leid.\n\n

<!--EDIT|murphy|1175602066-->
When C++ is your hammer, every problem looks like your thumb.
Ishka
 2007-04-03 16:11
#75611 #75611
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=docsnyder,02.04.2007, 08:55]@Ishka

Auf den April-Scherz bin ich voll reingefallen, Du Socke![/quote]
:) Dafür war er ja auch gedacht.

Aber jetzt mach ich gleich das wirkliche RDW 2007/8
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
betterworld
 2007-04-03 16:45
#75612 #75612
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Ich habe mal den Test abs($n)&1 gebenchmarkt.  Er ist von der Geschwindigkeit zwischen den anderen beiden Tests ($n&1 und $n%2).  Ausserdem sollte er auch auf Einserkomplementärmaschinen funktionieren.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub and_test    { $_[0] & 1      }
sub and_test2   { abs($_[0]) & 1 }
sub modulo_test { $_[0] % 2      }

cmpthese(
   20000000,
   {
       and_test    => sub { &and_test( $n ) },
       modulo_test => sub { &modulo_test( $n ) },
       and_test2   => sub { &and_test2( $n ) }
   }
);

                Rate modulo_test   and_test2    and_test
modulo_test 1242236/s          --         -9%        -20%
and_test2   1364256/s         10%          --        -12%
and_test    1546790/s         25%         13%          --
docsnyder
 2007-04-03 17:27
#75613 #75613
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@murphy

Quote
@DocSnyder: Ich glaube, wir meinen eigentlich das gleiche, reden aber irgendwie aneinander vorbei. Ich wollte nicht Deine Aussage an sich in Frage stellen, mir gefiel nur Deine Begründung nicht bzw. ich habe sie falsch verstanden. Falls ich mich bei meiner Antwort im Ton vergriffen habe, so tut mir das leid.

Ja, ich denke auch, wir sind der gleichen Auffassung.

Nein, im Ton hast Du Dich nicht vergriffen ;o)

Mit Deiner Zusammenfassung kann ich prima leben.

Gruss, Doc
GwenDragon
 2007-04-03 20:37
#75614 #75614
User since
2005-01-17
14836 Artikel
Admin1
[Homepage]
user image
Es wäre schöner vor Ostern, wenn es ein Programm wäre, das ein nettes Osterei als ASCII generiert.
Relais
 2007-04-03 21:15
#75615 #75615
User since
2003-08-06
2259 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Ishka,01.04.2007, 13:41]Die Aufgabe:
~~~~~~~~~~~~
Schreibe ein Programm, das zu einer gegebenen Zahl bestimmt, ob diese gerade oder ungerade ist.[/tt][/quote]
Code: (dl )
1


edit: warum funktioniert denn der Code-Block nicht?\n\n

<!--EDIT|Relais|1175620610-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop 12. bis 14. Mai 2025 in München.

Winter is Coming
GwenDragon
 2007-04-03 22:16
#75616 #75616
User since
2005-01-17
14836 Artikel
Admin1
[Homepage]
user image
Code: (dl )
aaa
geht doch nur in klein schreiben ;)

//EDIT:
Code: (dl )
1
Oha, aber nicht wenn der Code eine 1 ist :(\n\n

<!--EDIT|GwenDragon|1175625908-->
Relais
 2007-04-04 01:27
#75617 #75617
User since
2003-08-06
2259 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich wollte ja gar keine große -1- schreiben!
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop 12. bis 14. Mai 2025 in München.

Winter is Coming
<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten



View all threads created 2007-04-01 15:41.