Exponenten
Raspu
- xsl
Hallo,
ich möchte gerne den Wert 1.5^(-h1) durch xsl berechnen lassen.
h1 ist hierbei ein Wert der aus einer xml ausgelesen werden muss.
Geht das?
Raspu
Hallo Raspu,
ich möchte gerne den Wert 1.5^(-h1) durch xsl berechnen lassen.
h1 ist hierbei ein Wert der aus einer xml ausgelesen werden muss.
Geht das?
Fertige Potenz-, Logarithmus- oder gar Winkelfunktionen gibt es unter XSLT/XPath 1.0 und 2.0 nicht.
Da Du in anderen Postings die XSLT-Version 2.0 angegeben hast, wäre eine mittels xsl:function definierte Funktion möglich (unter XSLT 1.0 durch rekursive Templateaufrufe abbildbar).
In meiner kleinen mathematischen Bibliothek (primär für Sinus/Kosinus umgesetzt) gibt es die Funktion tm:pow(), welche für nichtnegative ganzzahlige Exponenten ausgelegt ist [1 div tm:pow(1.5,h1) wäre also bei passendem h1 möglich]. Baue ggf. eine alternative Funktion. Dieses Test-Stylesheet zeigt den Aufruf der Funktionen (zum Testen einfach gegen ein Dummy-XML-Dokument wie <root/> anwenden).
Grüße,
Thomas
Nachtrag:
Da in der Funktionsbibliothek auch tm:ln() und tm:exp() vorhanden sind, können Potenzen auch alternativ ermittelt werden, allerdings nur näherungsweise:
x^z kann umgeschrieben werden in tm:exp(z*tm:ln(x))
Somit lassen sich nichtganzzahlige Exponenten verwenden, allerdings keine keine x<=0.
Beispiele (mit 15 Gliedern in den Reihenentwicklungen):
<xsl:text>2^3 = </xsl:text><xsl:value-of select="tm:exp(3*tm:ln(2))"/><!-- 7.99999998 -->
<xsl:text>2^-3 = </xsl:text><xsl:value-of select="tm:exp(-3*tm:ln(2))"/><!-- 0.125 -->
<xsl:text>2.5^3.5 = </xsl:text><xsl:value-of select="tm:exp(3.5*tm:ln(2.5))"/><!-- 24.7052867 -->
<xsl:text>2.5^-3.5 = </xsl:text><xsl:value-of select="tm:exp(-3.5*tm:ln(2.5))"/><!-- 0.04047213 -->
Grüße,
Thomas