Geschwindigkeit der Ausführung der Funktionen ceil(),round(),floor() - Seite 7

 
Andrey Kisselyov:

Nehmen wir als Beispiel:
Wenn Sie sogar die Bittiefe der Maschine ändern, d.h. auf 64 Bit umstellen und die Genauigkeit der Maschine erhöht haben, wird Ihre Formel nicht mehr funktionieren, da die Genauigkeit der Maschine viel höher ist, als Sie in Ihrem Fehler eingestellt haben.

Mit Verlaub.

P.S. es kann andere Optionen geben, wo Ihre Formel auf einer Reihe von Zahlen scheitern wird. ständig Anpassungsfehler von der Umstellung auf eine andere Maschine, oder Änderungen in Compiler, die Sie nicht informiert sind, oder wenn Sie die Darstellung von Zahlen in der Maschine ändern, oder vom Schneiden eines gebrochenen Teils der Zahl beim Kompilieren einer neuen Version des Terminals ... Man weiß nicht, was sich ändern kann, und ich halte es nicht für eine gute Idee, ein IF zu machen oder zu erraten, was passieren wird, indem man einen Fehler immer wieder schreibt...

Ich denke, das ist eine Überlegung wert.


Da bin ich anderer Meinung. Die Formel(y=(int)(x+0.9999999999999997);) wird nicht aufhören zu funktionieren, wenn die Genauigkeit erhöht wird, sie wird auf die gleiche Weise funktionieren. Wie bisher tritt der Fehler im Bereich des gebrochenen Teils der Zahl zwischen DBL_EPSILON (dem aktuellen Wert: 0.000000000000022204460492503131) und 0.0000000000000003 auf. Selbst wenn DBL_EPSILON auf Null sinkt (was natürlich nicht möglich ist), vergrößert sich der Bereich um die Größe des aktuellen DBL_EPSILON, d.h. um 2.2204460492503131e-016. Ich glaube, man kann einen solchen Fehlerbereich sogar ignorieren.

Und was ist eigentlich der Begriff "Maschinengenauigkeit"? Es gibt standardisierte Genauigkeiten wie die doppelte und andere Arten. Ihre Argumentation zählt nicht. Ich sage nichts über P.S.)) Ich habe Angst, jemanden zu beleidigen.

Mit Verlaub.

 
Nikolai Semko:

Da bin ich anderer Meinung. Die Formel(y=(int)(x+0.9999999999999997);) wird nicht aufhören zu funktionieren, wenn die Genauigkeit erhöht wird, sie wird auf die gleiche Weise funktionieren. Wie bisher tritt der Fehler im Bereich des gebrochenen Teils der Zahl zwischen DBL_EPSILON (dem aktuellen Wert: 0.000000000000022204460492503131) und 0.0000000000000003 auf. Selbst wenn DBL_EPSILON auf Null sinkt (was natürlich nicht möglich ist), vergrößert sich der Bereich um die Größe des aktuellen DBL_EPSILON, d.h. um 2.2204460492503131e-016. Ich glaube, man kann einen solchen Fehlerbereich sogar ignorieren.

Und was ist eigentlich der Begriff "Maschinengenauigkeit"? Es gibt standardisierte Genauigkeiten wie die doppelte und andere Arten. Ihre Argumentation zählt nicht. Ich sage nichts über P.S.)) Ich habe Angst, jemanden zu beleidigen.

Hochachtungsvoll.

Bei der Anwendung auf Marktpreise können Sie die Genauigkeit in der Regel bei 5-6 Stellen belassen, und da Sie in der Mathematik arbeiten und nicht wissen, wer und was Ihre neue schnelle Berechnung benötigen wird, sollten Sie das "Prinzip des törichten Verhaltens" anwenden, wonach es egal ist, wer und wann diesen Wert setzen kann, bei dem die Funktion in Berechnungen falsch sein wird.

Respektiere dich selbst, jeder kann dir dein Gesicht in den Dreck ziehen, ist es das wert, einem Gegner einen Grund zu geben, dies zu tun, indem man unhöflich ist? Wir sind alle in etwas entwickelt, während andere Dinge für uns einfach nicht interessant oder nicht wichtig sind.
Da wir über Assembler sprechen und darüber, was Sie sich vorstellen, was mit dem Code nach dem Compiler passiert, werde ich Ihnen ein paar Sätze sagen, die Sie vielleicht verstehen.

Da ein Prozessor nur über eine begrenzte Anzahl von Bits in jedem Register verfügt, hat das Addieren und Subtrahieren oder jede andere Operation in diesen Registern einige knifflige Aspekte, wenn es um Flaggen geht.
Als jemand, der in Assembler gearbeitet hat, sollten Sie verstehen, wovon wir sprechen.
so sagen Sie mir auf Befehl ADD auf verschiedenen Modellen des Prozessors, ob es einen Überlauf, wenn Sie Code auf Assembler schreiben mit der gleichen Zahl auf verschiedenen Modellen und im Allgemeinen kann es nicht in jedem Register passen und wird abgeschnitten werden, von 8 Bit letzten Generation auf 64 Bit und mehr aktuelle Generation und wie kann es in Zukunft ändern (Technologie-Entwicklung ist so flüchtig, hat gerade 40 Jahre vergangen, und wir haben bereits eine Multi-Core-Prozessoren anstelle einer Lampe frühen 80er Jahren)?

meinen Respekt.
 
Es ist besser, die Profilerstellung zu öffnen und zu sehen, wo in Ihrem Code die Ausführung langsam ist, und das sind offensichtlich nicht die mathematischen Funktionen. Die meisten davon sind Schleifen, alle Arten von Abfragen und so weiter und so fort. Die mathematischen Funktionen gehören zu den schnellsten und der Versuch, dort etwas herauszuschneiden, ist für mich nicht sehr klug.

Mit Verlaub.
 
Nikolai Semko:

In Ordnung, meine Herren, Sie haben sich klar ausgedrückt. Ich werde die Funktion ceil für Sie ändern:

Diese Variante ist 25-50% langsamer als die Variante:y=(int)(x+0.9999999999999997); aber sie ist maximal korrekt, funktioniert für negative ganze Zahlen und ist dreimal schneller als ceil(x).

Aber ich selbst, als Gewöhnlicher und Gescheiterter, werde die Variante mit den Neunen verwenden, weil ich alle Ihre Argumente für langweilig halte und für mich, der ich lange in Assembler programmiert habe und daher weiß, was mit dem Code nach der Kompilierung passiert, ist es zu viel - Prüfungen dort einzubauen, wo man sie entbehren kann.

Wenn man zu Persönlichkeiten übergeht, fehlt es traditionell an Sachargumenten. Aber ich stelle Ihnen trotzdem eine Frage. Warum haben Sie die Zeit für eine Million Rundungen von 8 auf 5 oder 2 Millisekunden verkürzt? Wie hoch war die tatsächliche Belastung des Prozessors, wenn sich selbst solche Verzögerungen als Engpass erwiesen? Ich bin nicht auf einen solchen Bedarf gestoßen. Vielleicht ist es etwas Abstraktes, von akademischem Interesse?
 
Vladimir:
Persönlich zu werden bedeutet traditionell, dass es an sachlichen Argumenten mangelt.

Ich stimme zu, ebenso wie ein Mangel an kulturellem Verhalten, um den Gesprächspartner zu demütigen.

Hochachtungsvoll.

 
Andrey Kisselyov:
Was die "keine Anerkennung", habe ich nicht eine Bewertung Ihrer Argumente und nicht Ihre Verdienste zu schmälern, wie ich möchte, dass Sie. Respektieren Sie sich, reiben Sie Ihr Gesicht in den Schmutz kann jeder, ob Ihr Gegner einen Grund, dies zu tun, fragen Sie nach Unhöflichkeit in ihrem Handeln? wir alle haben in etwas entwickelt, und dass wir einfach nicht interessiert sind oder irrelevant für uns.
Wladimir:
Wer auf Persönlichkeiten setzt, dem fehlen traditionell die Sachargumente.
Andrey Kisselyov:

Dem stimme ich zu, ebenso wie der Mangel an kulturellem Verhalten bei dem Versuch, den Gesprächspartner zu demütigen.

Wow! Ich entschuldige mich natürlich, wenn ich jemanden beleidigt habe. Sie müssen sich durch meine Worte beleidigt gefühlt haben:

Nikolai Semko:

In Ordnung, meine Herren, das wäre geklärt. Ich ändere die Funktion ceil nur für Sie:

Aber ich selbst, als Normalbürger und C-Student, werde die Variante mit Neunen verwenden, weil ich alle Ihre Argumente für nerdig halte...

NikolaiSemko:

Und was ist eigentlich der Begriff "Maschinengenauigkeit"? Es gibt eine standardisierte Genauigkeit wie die doppelte und andere Arten. Ihre Argumentation zählt nicht. Ich sage nichts über P.S.)) Ich habe Angst, jemanden zu beleidigen.

Na ja, du weißt schon... Ich denke, Sie haben eine reiche Fantasie. In gewöhnlichen freundlichen Scherzen sieht man "Übertragung auf die Persönlichkeit", "Versuch, den Gesprächspartner zu demütigen", "Herabsetzung der Verdienste" ...

Oder habe ich etwas übersehen und irgendwo anders die Grenzen des Anstands überschritten?

Tut mir leid, Andrew, aber ich habe offensichtlich nicht genug Wissen und Erfahrung, um zu verstehen, was Sie in diesem P.S. geschrieben haben:

Andrey Kisselyov:
P.S. Es kann auch andere Varianten geben, wenn Ihre Formel bei einer Reihe von Zahlen fehlschlägt. Ständiger Anpassungsfehler aufgrund des Wechsels zu einer anderen Maschine, oder Änderungen im Compiler, über die Sie nicht informiert sind, oder Änderungen in der Maschinendarstellung von Zahlen, oder Abschneiden vonNachkommastellen beim Kompilieren in neuen Versionen des Terminals... Ich weiß nicht, was sich ändern kann, ich halte es für keine gute Idee, WENN zu tun oder zu leiden, um zu erraten, was passieren wird, indem man einen Fehler immer und immer wieder vorschreibt...
Ich wäre sehr dankbar, wenn mir jemand die Bedeutung dessen, was ich geschrieben habe, erklären könnte.
Ich möchte mich nochmals für meinen Tonfall entschuldigen. Ich setze mich stets für gegenseitigen Respekt unter den Kollegen und korrektes Verhalten ein. Der Teufel geht mir durch den Kopf.
 
Vladimir:
Was hat Sie dazu veranlasst, die Rundungszeit für eine Million von 8 auf 5 oder 2 Millisekunden zu reduzieren? Wie hoch war die tatsächliche Belastung des Prozessors, wenn sich selbst solche Verzögerungen als Engpass erwiesen? Ich bin nicht auf einen solchen Bedarf gestoßen. Vielleicht ist es etwas Abstraktes, von akademischem Interesse?
Andrey Kisselyov:
Esist besser, die Profilerstellung zu öffnen und zu sehen, wo in Ihrem Code Verzögerungen auftreten, und das sind offensichtlich nicht die mathematischen Funktionen. Meistens sind es Schleifen, verschiedene Abfragen und so weiter und so fort. Die mathematischen Funktionen gehören zu den schnellsten, und der Versuch, dort etwas zu verstecken, ist nicht sehr klug, denke ich.
Ich weiß nicht, warum du denkst, ich sei langsam. Im Gegenteil, ich glaube, meine Algorithmen sind die schnellsten. Ich bin einfach ein kleiner Geschwindigkeitsfanatiker. Natürlich bringt die Verwendung eines solchen alternativen Rundungsfunktionsersatzes nur einen sehr geringen Gewinn, nämlich nur Bruchteile eines Prozents. Aber wie man so schön sagt, aus der ganzen Welt. Dies gilt beispielsweise auch für die Luftfahrt und die Raketentechnik. Um das Gewicht zu reduzieren, ohne die Festigkeit zu beeinträchtigen, wird alles verändert, sogar die Schrauben. Vielleicht ist das ein Grund dafür, dass das Flugzeug entgegen aller Logik heute das sicherste Verkehrsmittel ist.
 
Nikolai Semko:

Wow! Ich entschuldige mich natürlich, wenn ich jemanden beleidigt habe. Sie müssen sich durch meine Worte beleidigt gefühlt haben:

Na ja, du weißt schon... Ich glaube, Sie haben eine lebhafte Fantasie. In einem einfachen freundlichen Geplänkel sehen Sie "Personalisierung", "Demütigung", "Herabsetzung"...

Wenn Sie sich erlauben, Ihre Freunde "lächerlich" zu machen, haben Sie keine Freunde, Sie haben Clowns um sich, über die Sie manchmal lachen und deren Freundschaft und Meinung Sie nicht schätzen.

Nikolai Semko:

Oder habe ich etwas übersehen und irgendwo anders die Grenzen des Anstands überschritten?

Ich bin nicht Ihr Freund, Bruder oder auch nur eine Ihnen nahestehende Person, damit Sie Ihnen irgendeine Art von Einschätzung geben können, schon gar nicht ÖFFENTLICH.

Nikolai Semko:
Tut mir leid, Andriy, aber ich habe anscheinend nicht genug Wissen und Erfahrung, um zu verstehen, was Sie in diesem P.S. geschrieben haben: Ich wäre sehr dankbar, wenn mir jemand die Bedeutung dessen erklären könnte, was Sie geschrieben haben.

Die Bedeutung dessen, was in P.S. geschrieben steht und was Sie aus irgendeinem Grund nicht verstehen können, liegt auf der Hand, Sie wissen nicht, wie sich die Technik, mit der Sie Ihre schnellen Formeln verwenden, entwickeln wird, Sie wissen nicht, wie sich die Plattform entwickeln wird, Sie wissen nicht, was später zum Compiler hinzugefügt wird und wie Zahlen im Prozessorregisterraum dargestellt werden, Sie wissen nichts darüber, und eine Konstante einzuführen und zu sagen, dass sie alles positiv und immer lösen wird, ist sozusagen eine Illusion.

Wenn Sie bedenken, dass Ihre Formel von anderen Leuten aus dem Forum übernommen und vielleicht in C oder Pascal oder so umgesetzt wird, müssen Sie auch diese Punkte berücksichtigen, denn die Mathematik kennt keine Grenzen, weder bei der Plattform noch bei der Programmiersprache.

Nikolai Semko:
Ich möchte mich nochmals für meinen Tonfall entschuldigen. Ich setze mich immer für gegenseitigen Respekt unter Kollegen und korrektes Verhalten ein. Ich bin aus der Reihe getanzt.

Entschuldigung angenommen. Machen Sie nicht noch einmal die gleichen Fehler, sonst sind Ihre Worte sinnloses Geschwätz.

Hochachtungsvoll.

 
Nikolai Semko:
Ich weiß nicht, wie Sie darauf kommen, dass ich langsam bin. Im Gegenteil, ich glaube, meine Algorithmen sind die schnellsten. Ich bin einfach ein kleiner Geschwindigkeitsfanatiker. Natürlich bringt die Verwendung eines solchen alternativen Rundungsfunktionsersatzes nur einen sehr geringen Gewinn, nämlich nur Bruchteile eines Prozents. Aber wie man so schön sagt, aus der ganzen Welt. Dies gilt beispielsweise auch für die Luftfahrt und die Raketentechnik. Um das Gewicht zu reduzieren, ohne die Festigkeit zu beeinträchtigen, wird alles verändert, sogar die Schrauben. Vielleicht ist das einer der Gründe, warum Flugzeuge heute entgegen jeder Logik das sicherste Verkehrsmittel sind.
Ich bin für eine vernünftige Herangehensweise an die Programmierung, bei der man nicht gegen die Logik beschleunigen kann, es ist besser, dies zu tun, aber jede "Krankheit" muss behandelt werden, da sie eine Abweichung von einer gesunden Lebensweise darstellt.

Mit Verlaub.
 
Andrey Kisselyov:

Wenn du dir erlaubst, deine Freunde zu "STUDIEREN", hast du keine Freunde, du hast Clowns um dich herum, über die du dich manchmal lustig machst und deren Freundschaft und Meinung du nicht schätzt.

Sieht so aus, als hätte Nikolai mit den Nerds recht gehabt ))

Ich persönlich habe dort keinen persönlichen Bezug gesehen. Und Sie haben zwar viele Buchstaben in Ihren Beiträgen, aber alles ist themenfremd und Sie scheinen nur um des Argumentierens willen zu argumentieren.