Javascript und quadratischer Mittelwert

Gast #7165930
Hallo, ich möchte in einem JS den quadratischen Mittelwert von 12.000 
Daten ausrechnen und benutze unter anderem  Math.pow(Wert, 2).
Beim Summieren kommt dabei leider sehr schnell nAn (Not a number) raus. 
Es handelt sich um auch tatsächlich um ursprüngliche long long-Daten. 
Selbst wenn ich die Daten mit Faktor 0.00001 verkleinere und nach der 
Berechnung mit 100000 zurückhole, kommt nAn raus
#7165949
Dein Problem ist wahrscheinlich nicht die Addition der Werte sondern 
liegt weiter vorne.

Wie liest du die Daten ein? Kommen die aus einem JSON oder einem anderen 
String basierten Format?

Sind das 64 bit Integer-Zahlen in einem Int64 Array oder als String?
Damit kann Javascript nicht wirklich gut umgehen, wenn du einen 
Genauigkeitsverlust vermeiden willst, dann musst du diese als BigInt 
hantieren, d.h. vom String selbst in einen BigInt konvertieren.

> let a=BigInt("123456789012345678901234567890")
> let b=a*a
> b
15241578753238836750495351562536198787501905199875019052100n

Sind es Floating Point Werte? Falls ja mit Punkt oder Komma als 
Dezimal-Separator?

Mit "," als Separator kommt NaN raus oder wenn noch was dahintersteht:

> Number("1,23")
NaN

> Number("123x")
NaN

> Number("123e")
NaN

> Number("123.5e3")
123500

 Michael
Gast #7168026
Bringt der Link hier was beim Hantieren mit größeren Zahlenwerten?

https://github.com/peterolson/BigInteger.js

Stackoverflow-Seiten können zu verschiedenen Thematiken hilfreich sein:

https://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript

bigInt() will muss man wohl erst importieren:

https://www.delftstack.com/de/howto/javascript/javascript-square-a-number/
#7168787
DPA schrieb:
> https://jsfiddle.net/4kLtf5y9/1/

Aber das ganze Bigint - Gewurschtel braucht's vermutlich garnicht.

Das Problem vom TE arbeitet ja nur auf relativ kleinen Zahlen, selbst im 
Absoluten Worst-Case ist er noch meilenweit vom Number.MAX_VALUE 
entfernt.
d.H. dass sein NaN von einem Overflow kommt, ist komplett 
ausgeschlossen.

allerdings verlässt er den Number.MAX_SAFE_INTEGER - Bereich, d.H. es 
gibt Rundungsfehler wg. Floating-Point. Das könnte man durch eine 
verbesserte Aufsummier-Reihenfolge optimieren.
#7168892
Εrnst B. schrieb:
> Aber das ganze Bigint - Gewurschtel braucht's vermutlich garnicht.

Das "vermutlich" ist das Problem hier. Der TO "daniel12" hat sich seit 3 
Tagen nicht gemeldet und keinerlei Details rausgelassen oder auch nur 
einen Hinweis, dass sich sein Problem in Luft aufgelöst hat.

Sollte "DPA" mit "daniel12" identisch sein, so kann ich das nicht 
erkennen.

> Das Problem vom TE arbeitet ja nur auf relativ kleinen Zahlen,

Ich konnte keinen Hinweis vom TO auf die konkreten Zahlen finden, außer 
folgendem: "long long-Daten"

 Michael
#7168947
Michael D. schrieb:
> Ich konnte keinen Hinweis vom TO auf die konkreten Zahlen finden, außer
> folgendem: "long long-Daten"

Eben, das wären dann maximal 2^64 (unsigned), also
>> 18446744073709551616 pro Wert.
Davon das Quadrat wäre maximal
>> 340282366920938463463374607431768211456
das mal 12000 für seine Summe ist
>> 4083388403051261561560495289181218537472000

also läppische 4*10^42 für den absoluten Worst-Case

Die Javascript-Zahlen laufen erst bei 10^308 über.

deshalb: "relativ klein".
Gast #7169030
Man sollte dem TO einen Abakus als Arbeitsmittel empfehlen.
Der kennt prinzipbedingt keinen Überlauf.

Genau die richtige Strafe für diese Javascriptfickler.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.