Thread Dezimalzahl in Dualzahl umwandeln (37 answers)
Opened by SirLant at 2003-09-08 18:55

kabel
 2003-09-16 01:21
#11050 #11050
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
der einzige schönheitsfehler ist, dass die funktionen mit 8 bit zahlen hantieren. eine erweiterung ist aber leicht möglich. die diskussion war 1) durch meine eingerosteten C kenntnisse und 2) durch einige begriffe bestimmt, deren bedeutungen bzw. die abgrenzung derer anscheinend mit der zeit verschwommen sind.

dual -> dezimal:

1100 = 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = (((1*2 + 1)*2) + 0)*2 + 0 = 12 (horner-schema)

Quote
C:\tmp>type test.pl
sub horner_scheme {
       my ($zahl) = @_;
       my ($head, @tail) = split //, $zahl;
       $head = "($head*2 + $_)" foreach @tail;
       $head;
}

my $delayed_expr = horner_scheme ($ARGV[0] || "1100");
print $delayed_expr, " evalutes to ", eval $delayed_expr;
C:\tmp>perl -w test.pl
(((1*2 + 1)*2 + 0)*2 + 0) evalutes to 12
C:\tmp>


die funktion wandelt eine binärzahl in die string-darstellung des hornerschen schemas um, die dann nur noch evaluiert werden muss.

die altmodische variante ;)
Quote
C:\tmp>type test.pl
$zahl += $_*2**$pot++ foreach split //, reverse $ARGV[0] || "1100"; print $zahl;
C:\tmp>perl test.pl
12
C:\tmp>
-- stefan

View full thread Dezimalzahl in Dualzahl umwandeln