Groups | Search | Server Info | Login | Register
Groups > de.comp.lang.javascript > #5284
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | de.comp.lang.javascript |
| Subject | Re: Fehler bei Berechnungen in JavaScript |
| Date | 2021-11-29 00:51 +0100 |
| Organization | PointedEars Software (PES) |
| Message-ID | <10054887.QKATZ9b1sv@PointedEars.de> (permalink) |
| References | (2 earlier) <sns59h$n0$1@solani.org> <2651122.v9v1EOSiMG@PointedEars.de> <snsa13$3fp$1@solani.org> <j0fuojFqj43U3@mid.individual.net> <snv1kt$i2o$1@solani.org> |
Leo Baumann wrote:
> Am 28.11.2021 um 00:53 schrieb Arno Welzel:
>> *Welche* Probleme?
>>
>> Was erwartest Du als Ergebnis und was erhältst Du statt dessen?
>
> Zunächst habe ich Fehler in den Berechnungsformeln beseitigt.-
> Aktuell habe ich das Problem, dass das e, unten in cosen() zu NaN wird,
> und ich das nicht durchschaue. :(
Nochmals: *Benutz* *einen* *Debugger*.
Der entsprechende Code lesbar geschrieben und grobe Fehler (nicht
deklarierte Variablen) korrigiert (einige Debugger können ersteres bis zu
eineem gewissen Grad):
function cosen (t, bb, lb, pi, nwk, neig, rif)
{
/* Längengrad Sonne */
let ls = 2*pi/24 * t - pi;
/* Breitengrad Sonne */
let bs = Math.sin(2*pi/8760 * t - pi/2) * nwk;
let cose1 = Math.cos(bb) * Math.cos(ls - lb);
let h = Math.acos(cose1);
let ri = Math.abs(
Math.acos(-Math.sin(bb) * cose1 / Math.cos(bb) / Math.sin(h))
);
/* Richtung zur Sonne */
let vz = Math.sin(ls - lb)/Math.sin(h);
if (vz < 0) ri = -ri;
let ele = pi/2
- Math.acos(
Math.sin(bb) * Math.sin(bs)
+ Math.cos(bb) * Math.cos(bs) * Math.cos(ls - lb)
);
/* Sonnenhöhe */
let e;
if (ele <= 0)
{
e = 0;
ele = 0;
}
else
{
e = (-Math.cos(ele) * Math.sin(neig) * Math.cos(ri - rif)
+ Math.sin(ele) * Math.cos(neig))
/ Math.sin(ele);
}
if (e <= 0) e = 0;
/* DEBUG */
console.log(ri * 180/pi);
return e;
}
(Das nächste Mal bitte selbst machen.)
Mit diesem nun lesbareren Code sollte spätestens jetzt klar sein, dass e nur
genau dann NaN sein kann, wenn einer der Faktoren im Zähler oder der Nenner
NaN ist [ist hingegen Math.sin(ele) === 0, dann ist e === Infinity]. Das
ist genau dann der Fall, wenn mindestens eines der Argumente der Methoden
NaN ist – also ele, neig, oder ri - rif. Letzteres kann dann NaN sein, wenn
ri oder rif NaN sind. Und so weiter.
Und Deine nachträgliche Korrektur
if (e <= 0) e = 0;
trifft AISB auf Number.isNaN(e) NICHT zu, da (NaN <= 0) === false.
Deswegen kann e bei der return-Anweisung NaN sein.
Ich würde übrigens π (und allgemein echte Konstanten, die nicht als
Platzhalter dienen) NICHT als Argument (hier: pi) übergeben; schon allein
weil die Parameterwerte in einer Funktion versehentlich modifiziert werden
könnten (dagegen hilft auch der Strict Mode nicht). Ausserdem bläht es die
Funktionssignatur unnötig auf und widerspricht dem Gesetz von Demeter
(“Black box”-Prinzip).
Wenn Du nicht ständig Math.PI schreiben willst, dann deklarier Dir eine
globale Konstante oder (besser) eine Modulkonstante:
let myMod = (function () {
/* Module constants */
const PI = Math.PI;
/* Private functions */
function _privateFunctionName (…)
{
… PI …
}
/* Public properties */
return {
publicMethodName: function (…) {
… _privateFunctionName(…) …
}
};
}());
Irnkwo im HTML-Code:
… myMod.publicMethodName(…); …
Die Bezeichner sind geeignet zu ändern.
Auch ist “e” ein schlechter (weil mehrdeutiger) Variablenbezeichner.
--
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.
Back to de.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-26 21:19 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 02:53 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 02:59 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 03:31 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 04:32 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 04:51 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 06:00 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 06:28 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 06:50 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 19:41 +0100
Re: Fehler bei Berechnungen in JavaScript Stefan Reuther <stefan.news@arcor.de> - 2021-11-27 10:59 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 16:28 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-28 00:53 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-28 05:47 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-29 00:51 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 15:41 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 16:12 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 16:23 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 16:30 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 16:56 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 17:00 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 17:02 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 17:02 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 17:06 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 17:10 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 23:46 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-30 04:12 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-01 14:29 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-02 01:27 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-02 02:20 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-02 04:00 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-02 07:11 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-03 03:51 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-03 04:57 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-03 05:33 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-03 05:18 +0100
csiph-web