Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.javascript > #5284

Re: Fehler bei Berechnungen in JavaScript

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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