Pas2JS: Es gibt keine tan(x) - Funktion?

Antworten
Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Niesi »

Hallo,

kann es sein, dass die Tangensfunktion in Pas2JS absichtlich weggelassen wurde :shock: oder ist es ein Bug? :?:


Bildschirmfoto vom 2024-01-08 07-48-21.png
Bildschirmfoto vom 2024-01-08 07-48-21.png (10.65 KiB) 8064 mal betrachtet
Bildschirmfoto vom 2024-01-08 07-48-37.png
Bildschirmfoto vom 2024-01-08 07-48-37.png (14.91 KiB) 8064 mal betrachtet
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Linkat
Lazarusforum e. V.
Beiträge: 560
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 3.4 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Linkat »

tan kann durch sind und cos bestimmt werden.
Es gilt:
tan(Alpha)=sin(Alpha)÷cos(Alpha)


Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Niesi »

Linkat hat geschrieben: Mo 8. Jan 2024, 11:25 tan kann durch sind und cos bestimmt werden.
Es gilt:
tan(Alpha)=sin(Alpha)÷cos(Alpha)


Gruß, Linkat
Danke für die Antwort, das ist mir bekannt.

Es geht mir aber vor allem darum, dass auch Pas2JS vollständig sein sollte. In der System.pas von Pas2JS sind ArcTan(x), ArcTan2(x) definiert, in der Math.pas von Pas2JS ist z.B. der ArcTanH(x) definiert. Aber kein Tan(x). Das ist einfach Mist, wenn - so wie gerade eben bei mir - Units aus anderen Projekten übernommen werden. Die laufen dann auf ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Linkat
Lazarusforum e. V.
Beiträge: 560
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 3.4 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Linkat »

Das ist natürlich verständlich.
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Man kann die Funktion relativ einfach ergänzen:

Code: Alles auswählen

uses
  JS, Classes, SysUtils, Web, browserconsole;

function Tan(const A : Double): Double; external name 'Math.tan';

begin
  Writeln(tan(1));
Man könnte mal hier durchgucken, was alles von der javascript Math zur Verfügung gestellt wird und die fehlenden Funktionen ergänzen und einen Features Report durchgeben.
Wen man dies Pfannenfertig machen würde, wäre der Coder der unit Math sicher noch dankbar.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Niesi »

Mathias hat geschrieben: Mo 8. Jan 2024, 17:22 Man kann die Funktion relativ einfach ergänzen:

Code: Alles auswählen

uses
  JS, Classes, SysUtils, Web, browserconsole;

function Tan(const A : Double): Double; external name 'Math.tan';

begin
  Writeln(tan(1));
Man könnte mal hier durchgucken, was alles von der javascript Math zur Verfügung gestellt wird und die fehlenden Funktionen ergänzen und einen Features Report durchgeben.
Wen man dies Pfannenfertig machen würde, wäre der Coder der unit Math sicher noch dankbar.
Also mir ist es nicht gelungen, die Quelltexte zu den einzelnen Funktionen zu fineden - daher ist das mit Ergänzen nicht so easy. Und wie sollten alle gemeinsam zusehen, dass auch die Pas2JS den ganzen Sprachumfang von Pascal / Objectpascal bietet. Für Beginnende ist das sonst schon eine Abschreckung, wenn da elementare Sachen fehlen.

Ich selbst habe mir eine "mathhelp.pas" erstellt und die Funktion tan(x: extended): extended; da definiert. Die kann ich dann wieder wegtunn, wenn das korrigiert ist. Aber Neulinge ... ???

Das wir die Bugs mal sammeln und dann möglichst gut dokumentiert einreichen ist eine gute Idee :idea: , ich bin dabei.
Letzte Woche hatte ich das mit der procedure ShowMessageFmt als Bug gemeldet, Du hast auch'n Bug gemeldet und so würde sich das sonst anhäufen - besser, wir machen das mal komplett, denke ich.

Und hey: ich will hier auf keinen Fall meckern oder rumkritisieren - ich finde die Pas2JS wirklich PHANTASTISCH :!: :!: :!: - Danke an alle, die das entwickelt haben.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Das wir die Bugs mal sammeln und dann möglichst gut dokumentiert einreichen ist eine gute Idee :idea: , ich bin dabei.
Ich würde es besser finden, jeden Bug einzeln einzureichen. So kann man wen etwas verbessert ist den Issues auf closed stellen.
Ich meine natürlich nicht, das man jede vergessen Math-Funktione einzel listet.
Also mir ist es nicht gelungen, die Quelltexte zu den einzelnen Funktionen zu fineden - daher ist das mit Ergänzen nicht so easy.
Hier sind alle gelistet:
https://developer.mozilla.org/en-US/doc ... dLocale=de
Daher konnte ich auch so in der Schnelle die external function hinzufügen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Niesi »

Es fehlen einige trigonometrische Funktionen im Pas2JS.

Weiß jemand, wie ich mir die selbst ergänzen kann? Oder sollte ich das als Bug melden?

Es ist sehr lästig, wenn große Units mit Pas2JS transpiliert werden sollen und es dann an Standarfunktionen des FPC hängenbleibt - für Neulinge sicher sehr abschreckend ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Weiß jemand, wie ich mir die selbst ergänzen kann? Oder sollte ich das als Bug melden?
Meine Idee, wen man Zeit und Lust hat, mit dem Link von der math.js schauen,was was alles fehlt.

Und dann wie diese Tan-Beispiel alles ergänzen.

Code: Alles auswählen

function Tan(const A : Double): Double; external name 'Math.tan';
Wen man dann die Liste zusammengestellt hat, würde ich dies all Feature-Report melden, so das man es in der math.pas von pas2js ergänzen kann.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Ich habe es unterdessen durchgeguckt und bin auf folgende fehlenden Funktionen gekommen.
Wobei cbrt und clz32 in der normalen Unit Math auch nicht vorkommen. Die habe ich einfach noch in der math lib von JavaScript gefunden.

Code: Alles auswählen

function Tan(const A : Double): Double; external name 'Math.tan';
function ArcTan(const A : Double): Double; external name 'Math.atan';
function ArcTan2(const y, x : Double): Double; external name 'Math.atan2';
function ArcTanh(const A : Double): Double; external name 'Math.atanh';
// evtl.
function cbrt(const A : Double): Double; external name 'Math.cbrt';
function clz32(const A : Double): Double; external name 'Math.clz32';   
Ich denke, jetzt wäre es ein Report wert, oder habe ich noch was vergessen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Habe es gerade in den Bug-Report gestellt:
https://gitlab.com/freepascal.org/fpc/p ... sues/39277
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Niesi »

Ich habe mal einen Kommentar hinzugefügt, ArcCos und Cot fehlen auch - Sorry, da war ich nicht schnell genug.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Niesi hat geschrieben: Di 16. Jan 2024, 11:14 Ich habe mal einen Kommentar hinzugefügt, ArcCos und Cot fehlen auch - Sorry, da war ich nicht schnell genug.
ArcCos ist schon vorhanden.

Cot habe ich nicht gelistet, weil es dies bei javascript math auch nicht gibt, ich habe nur solches ergänzt, welches es in javascript auch gibt.
Hier gibt es sogar eine Erklärung, wieso es cot nicht gibt.
https://mathjs.org/docs/reference/functions/cot.html

Aber in der FPC-Math, dort gibt es cot/cotan. In dieser Unit gibt es sicher noch einiges, welches es in javascript nicht gibt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Niesi »

Ok, Danke für den Hinweis zum ArcCos - jetzt hab ich ihn auch gefunden.

Den Cot(x) gibt es - so wie ich es verstehe - in JS für Matrizen. In der "normalen" Programmierung ist er verwendbar https://mathjs.org/docs/reference/functions.html
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pas2JS: Es gibt keine tan(x) - Funktion?

Beitrag von Mathias »

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten