Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249271 (10707)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Bug bei ^ bzw. POW(N1,N2)???
Stephan Sonneborn
| Datum:01.01.02 13:25 (stephans_email@freenet.de) |
Hallo zusammen! Zunächst wünsche ich allen Profan²-Fans ein gesegnetes, frohes und gesundes neues Jahr!!! Und schon habe ich das erste Problem :-) Beim Erstellen einer Formel zur zufälligen Generierung von reellen Zahlen habe ich versucht eine Formel der Art F = F0 + (-1)^x * F0/10 abzubilden. x läuft hierbei ganzzahlig zwischen 0 und 1. Somit ergeben sich aus dem Teilterm (-1)^x die Werte (-1)^0 = 1 für x = 0 und (-1)^1 = -1 für x = 1. So ist das auch gewünscht. Die Umsetzungn im Programm sieht so aus: 1: Last![1,o%] = 0 + POW(( 1),RND(1))*RND(320)/10 2: Last![2,o%] = 320 + POW((-1),RND(1))*RND(320)/10 Zeile 1 wird einwandfrei abgearbeitet, bei Zeile 2 kommt die Fehlermeldung: "Ungültiger Funktionswert" Noch schlimmer wirds, wenn ich 2: Last![2,o%] = 320 + ((-1)^RND(1))*RND(320)/10 schreibe. Dann kommt es zu einem Bluescreen! Kann Profan² keine negativen Zahlen potenzieren? Ich arbeite mit Profan 7.0e, Win98 auf einem AMD Duron 900. Schöne Neujahrsgrüße von Stephan
Roland G. Hülsmann
| Datum:01.01.02 15:05 (rgh-soft@t-online.de) |
PROFAN kann in der Tat keine negativen Zahlen potenzieren. Die Potenz einer negativen Zahl wäre nämlich nur dann ein in PROFAN verarbeitbarer Wert, wenn die Potenz ein ganzzahliger Wert wäre. Eine Formel wie POW(-5.9,2.6) hat kein in PROFAN darstellbares Ergebnis. Daher können in PROFAN (wie in den meisten Programmiersprachen und Taschenrechnern) nur Potenzen von positiven Zahlen erzeugt werden. Intern verwendet PROFAN folgende Formel für die POW(X,Y)-Funktion: Exp(Ln(X)*Y) (PASCAL hat - wie mach andere Sprache auch - keine eingebaute Potenzfunktion.) Ein gutes neues Jahr! Roland
Stephan Sonneborn
| Datum: 01.01.02 15:40 (stephans_email@freenet.de) |
Hallo Roland, >Daher können in PROFAN (wie in den meisten Programmiersprachen und Taschenrechnern) nur Potenzen von positiven Zahlen erzeugt werden. Das ist so nicht richtig. Selbst der Taschenrechner von Windows kann -1^1 bzw. -1^2 usw. berechnen. Ich rede dabei nicht von gebrochen-rationalen Exponenten, sondern zunächst nur von natürlichen Zahlen. 0,1,2,3,4... Jede Zahl (auch negative) potenziert mit 0 ergibt als Ergebnis 1. Jede negative Zahl potenziert mit einem geraden Exponenten ergibt ein positives Ergebnis und jede negative Zahl potenziert mit einem ungeradem Exponenten ergibt ein negatives Ergebnis. Das sollte auch ein Taschenrechner beherrschen. Gibt es einen Workaround für das Problem? Ich möchte lediglich auf einen Offset-Wert einen bestimmten Wert addieren bzw. subtrahieren. Dies soll nach dem Zufallsprinzip geschehen. Schöne Grüße von Stephan
Roland G. Hülsmann
| Datum:01.01.02 15:13 (rgh-soft@t-online.de) |
Was den Bluescreen betrifft: Sorry, da habe ich eine Fehlerroutine vergessen. Bei der Funktion POW wird der Wert überprüft und beim Operator leider nicht. Der Prozessor stolpert dann natürlch über die Rechenanweisung (der kann's nämlich auch nicht) ... In der nächsten PROFAN-Version gibt es auch hier eine Fehlermeldung. Danke für den Hinweis!

| Zurück zur Übersicht