Freigeisterhaus Foren-Übersicht
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   NutzungsbedingungenNutzungsbedingungen   BenutzergruppenBenutzergruppen   LinksLinks   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Quersumme von 100!
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Namronia
1500+ mal Qualität!



Anmeldungsdatum: 23.01.2008
Beiträge: 1687

Beitrag(#1646531) Verfasst am: 07.06.2011, 11:19    Titel: Quersumme von 100! Antworten mit Zitat

Ich sitz hier gerade vor nem Problem:

Ich will die Quersumme von 100 Fakultät ausrechnen. Das Problem der meisten Programmiersprachen ist, dass man nicht einfach in nen Integer konvertieren kann, das Problem z.B. bei Perl und PHP ist, dass sie


9.33262154 × 10^157

speichern und damit lässt sich dann keine Quersumme berechnen.

Mit use Math::BigInt; gehts auch irgendwie nicht.

Wie kann ich das relativ schnell & einfach berechnen? Sprache wäre vorzugsweise Perl oder C++.

Edit: Ich glaub, ich habs gelöst. Stimmt das Ergebnis? 648?

Der Code wäre:

Code:


#!/usr/bin/perl
use Math::BigInt;

my $wert = Math::BigInt->new('100.0');

sub fac {
  my ($n) = @_;

  if ($n <2>new($wx);
my @array = split(//, $x);
my $a = 0;
foreach (@array) {
    $a += $_;
}

print "\n\n$a\n\a";


Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ilmor
auf eigenen Wunsch deaktiviert



Anmeldungsdatum: 13.12.2008
Beiträge: 7151

Beitrag(#1646534) Verfasst am: 07.06.2011, 11:29    Titel: Antworten mit Zitat

9.33262154 × 10^157 übertrifft den Wertebereich von Int und Long bei weitem. Du musst einen eigenen Datentypen programmieren, der eine solche Zahl als Ganzahl ausdrücken kann. Du könntest zB ein 157 Stellen langes Array Programmieren, das an jeder Stelle die Werte von 0 bis 9 annehmen kann. Dann musst du noch die Multiplikation auf diesen Array definieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Namronia
1500+ mal Qualität!



Anmeldungsdatum: 23.01.2008
Beiträge: 1687

Beitrag(#1646535) Verfasst am: 07.06.2011, 11:33    Titel: Antworten mit Zitat

Ilmor hat folgendes geschrieben:
9.33262154 × 10^157 übertrifft den Wertebereich von Int und Long bei weitem. Du musst einen eigenen Datentypen programmieren, der eine solche Zahl als Ganzahl ausdrücken kann. Du könntest zB ein 157 Stellen langes Array Programmieren, das an jeder Stelle die Werte von 0 bis 9 annehmen kann. Dann musst du noch die Multiplikation auf diesen Array definieren.


Ja, das ist genau das Problem, an dem ich hing & ich weiß nicht, wie man eigene Datentypen in Perl definiert (wollte es aber gern in Perl machen).

Aber wie gesagt, ich denke, ich habe das Ding doch mit bigint lösen können.

Danke trotzdem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
esme
lebt ohne schützende Gänsefüßchen.



Anmeldungsdatum: 12.06.2005
Beiträge: 5667

Beitrag(#1646602) Verfasst am: 07.06.2011, 14:48    Titel: Antworten mit Zitat

Warum willst du die Quersumme berechnen?
_________________
Gunkl über Intelligent Design:
Da hat sich die Kirche beim Rückzugsgefecht noch einmal grandios verstolpert und jetzt wollen sie auch noch Haltungsnoten für die argumentative Brez'n, die sie da gerissen haben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Namronia
1500+ mal Qualität!



Anmeldungsdatum: 23.01.2008
Beiträge: 1687

Beitrag(#1646701) Verfasst am: 07.06.2011, 20:14    Titel: Antworten mit Zitat

esme hat folgendes geschrieben:
Warum willst du die Quersumme berechnen?


Wir haben gerade in der Berufsschule nicht all zu viel zu tun und wir haben Project Euler gefunden. Ne Seite, mit mathematischen Problemen, die man irgendwie durch Software lösen muss. Und eines davon war genau das hier, aber ich habs zum Glück geschafft Auf den Arm nehmen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1646703) Verfasst am: 07.06.2011, 20:20    Titel: Antworten mit Zitat

Namronia hat folgendes geschrieben:
esme hat folgendes geschrieben:
Warum willst du die Quersumme berechnen?


Wir haben gerade in der Berufsschule nicht all zu viel zu tun und wir haben Project Euler gefunden. Ne Seite, mit mathematischen Problemen, die man irgendwie durch Software lösen muss. Und eines davon war genau das hier, aber ich habs zum Glück geschafft Auf den Arm nehmen

Aber warum denn in Perl?
Da liegen doch nun wirklich nicht dessen Stärken.

Ich hab mal zur Übung ein Programm zur Primfaktorzerlegung einmal in C++ und einmal in Python geschrieben – Wo C++ noch ca. 30 min brauchte, lag Python schon bei ca. 4 Stunden.

Python wenn es einfach sein und funktionieren soll,
C++ wenn es zeitkritisch ist,
Perl wenn es um Reintext geht,
Java, wenn es langsam sein und nur sporadisch funktionieren soll.
_________________
In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
DerBernd
auf Wunsch deaktiviert



Anmeldungsdatum: 16.10.2010
Beiträge: 1043

Beitrag(#1646716) Verfasst am: 07.06.2011, 21:11    Titel: Re: Quersumme von 100! Antworten mit Zitat

Namronia hat folgendes geschrieben:

Edit: Ich glaub, ich habs gelöst. Stimmt das Ergebnis? 648?


Ja, das spuckt mein Taschenrechner auch aus, 100! ist 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ; die Quersumme 648
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fwo
Caterpillar D9



Anmeldungsdatum: 05.02.2008
Beiträge: 26512
Wohnort: im Speckgürtel

Beitrag(#1646717) Verfasst am: 07.06.2011, 21:12    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
.....
Java, wenn es langsam sein und nur sporadisch funktionieren soll.

Cool Jetzt weiß ich endlich, warum SAP immer stärker auf JAVA setzt.

fwo
_________________
Ich glaube an die Existenz der Welt in der ich lebe.

The skills you use to produce the right answer are exactly the same skills you use to evaluate the answer. Isso.

Es gibt keinen Gott. Also: Jesus war nur ein Bankert und alle Propheten hatten einfach einen an der Waffel (wenn es sie überhaupt gab).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Namronia
1500+ mal Qualität!



Anmeldungsdatum: 23.01.2008
Beiträge: 1687

Beitrag(#1646719) Verfasst am: 07.06.2011, 21:17    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
Namronia hat folgendes geschrieben:
esme hat folgendes geschrieben:
Warum willst du die Quersumme berechnen?


Wir haben gerade in der Berufsschule nicht all zu viel zu tun und wir haben Project Euler gefunden. Ne Seite, mit mathematischen Problemen, die man irgendwie durch Software lösen muss. Und eines davon war genau das hier, aber ich habs zum Glück geschafft Auf den Arm nehmen

Aber warum denn in Perl?
Da liegen doch nun wirklich nicht dessen Stärken.

Ich hab mal zur Übung ein Programm zur Primfaktorzerlegung einmal in C++ und einmal in Python geschrieben – Wo C++ noch ca. 30 min brauchte, lag Python schon bei ca. 4 Stunden.

Python wenn es einfach sein und funktionieren soll,
C++ wenn es zeitkritisch ist,
Perl wenn es um Reintext geht,
Java, wenn es langsam sein und nur sporadisch funktionieren soll.


Ein anderer Klasssenkamerad hatte in Perl angefangen, und wir habens dann auch damit zu Ende gebracht.

Und ja, du hasts perfekt zusammengefasst, was wann Lachen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gollrich
superheftig general



Anmeldungsdatum: 06.12.2007
Beiträge: 1098
Wohnort: Mannheim

Beitrag(#1646720) Verfasst am: 07.06.2011, 21:17    Titel: Antworten mit Zitat

fwo hat folgendes geschrieben:
nocquae hat folgendes geschrieben:
.....
Java, wenn es langsam sein und nur sporadisch funktionieren soll.

Cool Jetzt weiß ich endlich, warum SAP immer stärker auf JAVA setzt.

fwo


nee nee das liegt dann nur an der Inkompetenz des Entwicklers....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
boomklever
Impfgegnergegner



Anmeldungsdatum: 25.07.2006
Beiträge: 11112
Wohnort: Stuttgart

Beitrag(#1646738) Verfasst am: 07.06.2011, 21:53    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:

Perl wenn es um Reintext geht

Du und deine Perl-Phobie. ^^ Text parsen ist eine der Stärken Perls, bei weitem nicht sein einziger Einsatzbereich. Es gibt einige Einsatzbereiche, in denen Perl wirklich keine gute Figur macht - z.B. Treiber-Programmierung oder am anderen Ende der Skala graphische Office-Suites. Bei den meisten Anwendungen, die dazwischen liegen ist Perl eine gut geeignete Sprache.

Edit: Dummschwätz entfernt.
_________________

Don't gift pearls before casting an octopus in a movie.
-- Cherry (ACNH)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Critic
oberflächlich



Anmeldungsdatum: 22.07.2003
Beiträge: 16358
Wohnort: Arena of Air

Beitrag(#1646799) Verfasst am: 08.06.2011, 02:58    Titel: Antworten mit Zitat

Hab's eben in Java implementiert, der Umbruch im Code-Feld wurde im übrigen von PHPBB produziert. Habe ich wenigstens mal die Klasse BigInteger kennengelernt.
(Jawohl, synthetische Benchmarks bilden nicht alles ab, was bei der Entscheidung für eine Sprache relevant sein könnte freakteach.)

Code:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
QS(100!) = 648

_________________
"Die Pentagon-Gang wird in der Liste der Terrorgruppen geführt"

Dann bin ich halt bekloppt. Mit den Augen rollen

"Wahrheit läßt sich nicht zeigen, nur erfinden." (Max Frisch)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jagy
Herb Derpington III.



Anmeldungsdatum: 26.11.2006
Beiträge: 7275

Beitrag(#1646838) Verfasst am: 08.06.2011, 10:24    Titel: Re: Quersumme von 100! Antworten mit Zitat

Namronia hat folgendes geschrieben:
Stimmt das Ergebnis? 648?


Für sowas ist ja Wolfram Alpha gut:
Code:
http://www.wolframalpha.com/input/?i=sum%20of%20digits%20100!

_________________
INGLIP HAS BEEN SUMMONED - IT HAS BEGUN!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Namronia
1500+ mal Qualität!



Anmeldungsdatum: 23.01.2008
Beiträge: 1687

Beitrag(#1646867) Verfasst am: 08.06.2011, 12:07    Titel: Re: Quersumme von 100! Antworten mit Zitat

jagy hat folgendes geschrieben:
Namronia hat folgendes geschrieben:
Stimmt das Ergebnis? 648?


Für sowas ist ja Wolfram Alpha gut:
Code:
http://www.wolframalpha.com/input/?i=sum%20of%20digits%20100!


Danke, aber dann wäre das ja langweilig und nicht gerade Sinn des "Spiels" Auf den Arm nehmen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sanne
gives peas a chance.



Anmeldungsdatum: 05.08.2003
Beiträge: 12088
Wohnort: Nordschland

Beitrag(#1646869) Verfasst am: 08.06.2011, 12:20    Titel: Antworten mit Zitat

Gibts außer mir noch jemanden, der das Ausrufezeichen in der Überschrift mißinterpretiert und spontan im Kopf ausgerechnet hat:
1 + 0 + 0 = 1
_________________
Ich will das Internet doch nicht mit meinen Problemen belästigen! (Marge Simpson)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sri YUKTEREZ
registrierter User



Anmeldungsdatum: 12.01.2007
Beiträge: 223

Beitrag(#1646870) Verfasst am: 08.06.2011, 12:25    Titel: Antworten mit Zitat

Auf die Gefahr hin dass man mich jetzt auslachen wird...
Quersummen Berechner
EDIT: ich sehe, hier ist die Rede nicht von 100 sondern von 100 Fakultät... Da ist mein Link natürlich wertlos
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fwo
Caterpillar D9



Anmeldungsdatum: 05.02.2008
Beiträge: 26512
Wohnort: im Speckgürtel

Beitrag(#1646873) Verfasst am: 08.06.2011, 12:38    Titel: Antworten mit Zitat

Sanne hat folgendes geschrieben:
Gibts außer mir noch jemanden, der das Ausrufezeichen in der Überschrift mißinterpretiert und spontan im Kopf ausgerechnet hat:
1 + 0 + 0 = 1

Ja, mich. Allerdings war das ein Grund, den Post zu lesen und da stand es ausgeschrieben.....

fwo
_________________
Ich glaube an die Existenz der Welt in der ich lebe.

The skills you use to produce the right answer are exactly the same skills you use to evaluate the answer. Isso.

Es gibt keinen Gott. Also: Jesus war nur ein Bankert und alle Propheten hatten einfach einen an der Waffel (wenn es sie überhaupt gab).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Norm
registrierter User



Anmeldungsdatum: 12.02.2007
Beiträge: 8149

Beitrag(#1646883) Verfasst am: 08.06.2011, 13:27    Titel: Antworten mit Zitat

fwo hat folgendes geschrieben:
Sanne hat folgendes geschrieben:
Gibts außer mir noch jemanden, der das Ausrufezeichen in der Überschrift mißinterpretiert und spontan im Kopf ausgerechnet hat:
1 + 0 + 0 = 1

Ja, mich. Allerdings war das ein Grund, den Post zu lesen und da stand es ausgeschrieben.....

fwo

Ja, ich auch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1646953) Verfasst am: 08.06.2011, 16:47    Titel: Antworten mit Zitat

joran hat folgendes geschrieben:
nocquae hat folgendes geschrieben:

Perl wenn es um Reintext geht

Du und deine Perl-Phobie. ^^ Text parsen ist eine der Stärken Perls, bei weitem nicht sein einziger Einsatzbereich. Es gibt einige Einsatzbereiche, in denen Perl wirklich keine gute Figur macht - z.B. Treiber-Programmierung oder am anderen Ende der Skala graphische Office-Suites. Bei den meisten Anwendungen, die dazwischen liegen ist Perl eine gut geeignete Sprache.


Zitat:
Edit: Dummschwätz entfernt.

Stimmt ja gar nicht.
_________________
In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1646955) Verfasst am: 08.06.2011, 16:48    Titel: Antworten mit Zitat

Critic hat folgendes geschrieben:
Hab's eben in Java implementiert, der Umbruch im Code-Feld wurde im übrigen von PHPBB produziert. Habe ich wenigstens mal die Klasse BigInteger kennengelernt.
(Jawohl, synthetische Benchmarks bilden nicht alles ab, was bei der Entscheidung für eine Sprache relevant sein könnte freakteach.)

Code:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
QS(100!) = 648

Stimmt das tatsächlich? Die 24 Nullen am Ende kommen mir eher so vor, als wären zwischendurch irgendwelche Datentypen an ihre Grenzen gestoßen und die Summe am Ende mit Nullen aufgefüllt, um auf die richtige Stellenzahl zu kommen.
_________________
In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
fwo
Caterpillar D9



Anmeldungsdatum: 05.02.2008
Beiträge: 26512
Wohnort: im Speckgürtel

Beitrag(#1646966) Verfasst am: 08.06.2011, 17:16    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
Critic hat folgendes geschrieben:
Hab's eben in Java implementiert, ....
Code:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
QS(100!) = 648

Stimmt das tatsächlich? Die 24 Nullen am Ende kommen mir eher so vor, als wären zwischendurch irgendwelche Datentypen an ihre Grenzen gestoßen und die Summe am Ende mit Nullen aufgefüllt, um auf die richtige Stellenzahl zu kommen.

Glaube ich nicht. Allein die Faktoren 10, 20 ...100 sorgen für 11 Nullen am Ende. Nun nimm noch die Zahlen außer den gerade aufgezählten dazu, die den Faktor 5 enthalten: das dürfte gegenüber dem häufigeren Faktor 2 der limitierende Faktor sein und nach Pi mal Daumen würde ich sagen: Passt schon und wenn es nicht so wäre, wäre eher ein Fehler drin.

Es wäre auch komisch, dass Critic und Wolfram den selben Fehler gemacht hätten - die kommen nämlich auf die selbe Quersumme zwinkern

fwo
_________________
Ich glaube an die Existenz der Welt in der ich lebe.

The skills you use to produce the right answer are exactly the same skills you use to evaluate the answer. Isso.

Es gibt keinen Gott. Also: Jesus war nur ein Bankert und alle Propheten hatten einfach einen an der Waffel (wenn es sie überhaupt gab).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1646975) Verfasst am: 08.06.2011, 17:31    Titel: Antworten mit Zitat

fwo hat folgendes geschrieben:
Es wäre auch komisch, dass Critic und Wolfram den selben Fehler gemacht hätten - die kommen nämlich auf die selbe Quersumme zwinkern

Das wäre ein Argument, wenn das von Hand berechnet würde. Was ich für eher unwahrscheinlich halte. Es sei denn, bei Wolfram alpha säße Rainman am anderen Ende der Leitung.
In der Praxis spielen eher limitierende Faktoren der IT eine Rolle, und die sind u. U. ähnlicher, als man glaubt.

„Das ist mathematisch korrekt“ würde ich dagegen als Antwort akzeptieren.
_________________
In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
esme
lebt ohne schützende Gänsefüßchen.



Anmeldungsdatum: 12.06.2005
Beiträge: 5667

Beitrag(#1646976) Verfasst am: 08.06.2011, 17:35    Titel: Antworten mit Zitat

100/5+100/25=20+4=24 Nullen.
_________________
Gunkl über Intelligent Design:
Da hat sich die Kirche beim Rückzugsgefecht noch einmal grandios verstolpert und jetzt wollen sie auch noch Haltungsnoten für die argumentative Brez'n, die sie da gerissen haben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pera
auf eigenen Wunsch deaktiviert



Anmeldungsdatum: 01.07.2009
Beiträge: 4256

Beitrag(#1646979) Verfasst am: 08.06.2011, 17:43    Titel: Antworten mit Zitat

esme hat folgendes geschrieben:
100/5+100/25=20+4=24 Nullen.


Wollt ich grade schreiben.
Bin aber zu blöd die Summenformel richtig darzustellen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fwo
Caterpillar D9



Anmeldungsdatum: 05.02.2008
Beiträge: 26512
Wohnort: im Speckgürtel

Beitrag(#1646983) Verfasst am: 08.06.2011, 17:57    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
fwo hat folgendes geschrieben:
Es wäre auch komisch, dass Critic und Wolfram den selben Fehler gemacht hätten - die kommen nämlich auf die selbe Quersumme zwinkern

Das wäre ein Argument, wenn das von Hand berechnet würde. Was ich für eher unwahrscheinlich halte. Es sei denn, bei Wolfram alpha säße Rainman am anderen Ende der Leitung.
In der Praxis spielen eher limitierende Faktoren der IT eine Rolle, und die sind u. U. ähnlicher, als man glaubt.

„Das ist mathematisch korrekt“ würde ich dagegen als Antwort akzeptieren.

Dann machen wir es ohne Rainman im Kopf: Die Zahlen 1 bis 100 enthalten 20 Zahlen, die durch 5 teilbar sind, 4 davon sind sogar duch 25 teilbar, sodass das Produkt 100! den Primfaktor 5 genau 24 mal enthält. Die Betrachtung der 2 kann ich mir sparen : Es ist mathematisch korrekt, dass 100! 24 Nullen am Ende hat.

Zu den Datentypen müsste mal jetzt jemand kommen, der sich mit dem BigInt in Java auskennt. Ich bin davon ausgegangen, dass es sich hier tatsächlich um einen Ziffernarray handelt, auf dem die Maschine so rechnet, wie wir es schriftlich tun - so hätte ich es selbst gemacht. Da kommst Du dann in den Zwischenschritten auch theoretisch nicht in die Nähe irgendwelcher Überlaufgefahren.

uups, da waren welche schneller.

fwo
_________________
Ich glaube an die Existenz der Welt in der ich lebe.

The skills you use to produce the right answer are exactly the same skills you use to evaluate the answer. Isso.

Es gibt keinen Gott. Also: Jesus war nur ein Bankert und alle Propheten hatten einfach einen an der Waffel (wenn es sie überhaupt gab).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mahone
registrierter User



Anmeldungsdatum: 22.12.2008
Beiträge: 842
Wohnort: Munich

Beitrag(#1646996) Verfasst am: 08.06.2011, 19:02    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
joran hat folgendes geschrieben:
nocquae hat folgendes geschrieben:

Perl wenn es um Reintext geht

Du und deine Perl-Phobie. ^^ Text parsen ist eine der Stärken Perls, bei weitem nicht sein einziger Einsatzbereich. Es gibt einige Einsatzbereiche, in denen Perl wirklich keine gute Figur macht - z.B. Treiber-Programmierung oder am anderen Ende der Skala graphische Office-Suites. Bei den meisten Anwendungen, die dazwischen liegen ist Perl eine gut geeignete Sprache.


Zitat:
Edit: Dummschwätz entfernt.

Stimmt ja gar nicht.
Gröhl...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Critic
oberflächlich



Anmeldungsdatum: 22.07.2003
Beiträge: 16358
Wohnort: Arena of Air

Beitrag(#1647068) Verfasst am: 09.06.2011, 00:56    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
Critic hat folgendes geschrieben:
Hab's eben in Java implementiert, der Umbruch im Code-Feld wurde im übrigen von PHPBB produziert. Habe ich wenigstens mal die Klasse BigInteger kennengelernt.
(Jawohl, synthetische Benchmarks bilden nicht alles ab, was bei der Entscheidung für eine Sprache relevant sein könnte freakteach.)

Code:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
QS(100!) = 648

Stimmt das tatsächlich? Die 24 Nullen am Ende kommen mir eher so vor, als wären zwischendurch irgendwelche Datentypen an ihre Grenzen gestoßen und die Summe am Ende mit Nullen aufgefüllt, um auf die richtige Stellenzahl zu kommen.


Tatsache ist: das habe ich zuerst auch gedacht. Ich hatte mir dann auch alle Zwischenwerte anzeigen lassen, um das nachzuvollziehen.

(2)
fwo hat folgendes geschrieben:
Zu den Datentypen müsste mal jetzt jemand kommen, der sich mit dem BigInt in Java auskennt. Ich bin davon ausgegangen, dass es sich hier tatsächlich um einen Ziffernarray handelt, auf dem die Maschine so rechnet, wie wir es schriftlich tun - so hätte ich es selbst gemacht. Da kommst Du dann in den Zwischenschritten auch theoretisch nicht in die Nähe irgendwelcher Überlaufgefahren.


Naja, "auskennen": Es gibt jedenfalls eine Implementierung mit Sun-Copyright auf einer Open-Source-Seite - über Lizenzfragen wollte ich mich nicht auslassen - (Link), das könnte also die gelieferte (oder zumindest eine Vorversion davon) sein.

Ein Wert wird dort in einem Array von Werten vom Typ int gespeichert, der dargestellte Wert kann also zunächst einmal beinahe beliebig groß werden. Bei der Multiplikation wird im Prinzip die Schulmethode implementiert, natürlich blockweise in der entsprechenden Länge, und Überträge werden auf das Element des Arrays addiert, das den nächsthöheren Block des Ergebnisses darstellt.
_________________
"Die Pentagon-Gang wird in der Liste der Terrorgruppen geführt"

Dann bin ich halt bekloppt. Mit den Augen rollen

"Wahrheit läßt sich nicht zeigen, nur erfinden." (Max Frisch)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
brf
registrierter User



Anmeldungsdatum: 25.05.2010
Beiträge: 366

Beitrag(#1647460) Verfasst am: 09.06.2011, 23:15    Titel: Antworten mit Zitat

fwo hat folgendes geschrieben:
...
Zu den Datentypen müsste mal jetzt jemand kommen, der sich mit dem BigInt in Java auskennt. Ich bin davon ausgegangen, dass es sich hier tatsächlich um einen Ziffernarray handelt, auf dem die Maschine so rechnet, wie wir es schriftlich tun - so hätte ich es selbst gemacht.

Stimmt. Halb. Sie rechnen mit Bytes in einem Zahlensystem zur Basis 256 (nicht 10) und sie verwenden ausgefeilte Multiplikationsalgorithmen, die weit von den Handalgorithmen entfernt sind. Aber dafür schnell.
Ein ähnlich schnelles Paket für C/C++ ist übrigens GMP (Gnu Multiple Precision)
Auf niedrigerem Niveau aber verständlicher ist es in den numerical Recipes erläutert, wo zur Multiplikation eine FastFourierTranfo (FFT) verwendet wird.
http://www.nrbook.com/a/bookcpdf/c20-6.pdf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Critic
oberflächlich



Anmeldungsdatum: 22.07.2003
Beiträge: 16358
Wohnort: Arena of Air

Beitrag(#1647477) Verfasst am: 09.06.2011, 23:54    Titel: Antworten mit Zitat

brf hat folgendes geschrieben:
fwo hat folgendes geschrieben:
...
Zu den Datentypen müsste mal jetzt jemand kommen, der sich mit dem BigInt in Java auskennt. Ich bin davon ausgegangen, dass es sich hier tatsächlich um einen Ziffernarray handelt, auf dem die Maschine so rechnet, wie wir es schriftlich tun - so hätte ich es selbst gemacht.

Stimmt. Halb. Sie rechnen mit Bytes in einem Zahlensystem zur Basis 256 (nicht 10) und sie verwenden ausgefeilte Multiplikationsalgorithmen, die weit von den Handalgorithmen entfernt sind. Aber dafür schnell.
Ein ähnlich schnelles Paket für C/C++ ist übrigens GMP (Gnu Multiple Precision)
Auf niedrigerem Niveau aber verständlicher ist es in den numerical Recipes erläutert, wo zur Multiplikation eine FastFourierTranfo (FFT) verwendet wird.
http://www.nrbook.com/a/bookcpdf/c20-6.pdf


(Vielleicht sollte ich mir angewöhnen, Gedanken auch auszuschreiben:) Wie gesagt, kann man auf verschiedene Arten multiplizieren. Es geht deutlich effizienter -- wenn auch mit zum Teil sehr viel mehr Denkaufwand beschrieben, aber das ist ja so einer der Trade-Offs hierbei -- als per Schulmethode (Beispiel: Karatsuba-Algorithmus, oder bei Schönhage-Strassen mit Hilfe der "superschnellen Fourier-Transformation"). Die verlinkte Implementierung von BigInteger leidet abgesehen von der Effizienz auch unter anderen Performance-Schwächen (es werden dort ja immer Objekte erzeugt, und ein Objekt zu instanziieren nimmt um Größenordnungen mehr Zeit in Anspruch als die reine Multiplikation).
_________________
"Die Pentagon-Gang wird in der Liste der Terrorgruppen geführt"

Dann bin ich halt bekloppt. Mit den Augen rollen

"Wahrheit läßt sich nicht zeigen, nur erfinden." (Max Frisch)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
brf
registrierter User



Anmeldungsdatum: 25.05.2010
Beiträge: 366

Beitrag(#1647513) Verfasst am: 10.06.2011, 07:45    Titel: Antworten mit Zitat

Critic hat folgendes geschrieben:
...
(Beispiel: Karatsuba-Algorithmus, oder bei Schönhage-Strassen mit Hilfe der "superschnellen Fourier-Transformation"). Die verlinkte Implementierung von BigInteger leidet abgesehen von der Effizienz auch unter anderen Performance-Schwächen (es werden dort ja immer Objekte erzeugt, und ein Objekt zu instanziieren nimmt um Größenordnungen mehr Zeit in Anspruch als die reine Multiplikation).

Zwei Fragen:
1. Ich kenne die schnelle Fouriertrafo, aber keine superschnelle. Gibts da eine Neuentwicklung, die schneller als O(n*log(n)) ist=
2. Die Algorithmen bei BigInteger sind (meines Wissens) die besten heute verfügbaren. Die (immer wieder in der Ring geworfenenen) "Performanceschwächen" sind eigentlich nur den Preis, den man für Objektorientierung zahlen muss. OO ist für viele Probleme nicht wegzudenken, weil Programme ohne OO mehr (zu viel) Entwicklungzeit brauchen und schlechter (viel zu schlecht) wartbar wären.
Rekursion hat in den 1960er Jahren einen ähnlichen Preis gefordert und viele (alte Assembler-)Programmierer haben damals argumentiert, Rekursion wäre zu langsam. Umgekehrt wird ein Schuh draus: Ohne Rekursion stünden wir noch auf dem Programmstand von etwa 1970. Ohne OO gäbe es nur Programme wie 1980.
Nun zur Frage: Woher hast Du Informationen, dass Objekterzeugung mehr Zeit in Anspruch nimmt als Multiplikation? Objekterzeugung dauert wenige zig Nanosekunden. Multiplikation mit FFT (z.B.) ist O (nlog(n)). Bei n=10000 sind das schon Millisekunden, bei n=1000000 geht das in den Sekundenbereich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Impressum & Datenschutz


Powered by phpBB © 2001, 2005 phpBB Group