Я ищу решение для вычисления степени числа с десятичной степенью в XSLT 1.0. В настоящее время метод расчета, который я использую, вычисляет мощность только для недесятичных показателей. Это шаблон, который я использую в настоящее время:
<xsl:call-template name="Pow">
<xsl:with-param name="Base" select="10"/>
<xsl:with-param name="Exponent" select="2"/>
<xsl:with-param name="Result" select="1"/>
</xsl:call-template>
<xsl:template name="Pow"> <!-- TODO: Handle decimal exponents -->
<xsl:param name="Base"/>
<xsl:param name="Exponent"/>
<xsl:param name="Result"/>
<xsl:choose>
<xsl:when test="$Exponent = 0">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:when test="$Exponent = 1">
<xsl:value-of select="$Result * $Base"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="Pow">
<xsl:with-param name="Base" select="$Base"/>
<xsl:with-param name="Exponent" select="$Exponent - 1"/>
<xsl:with-param name="Result" select="$Result * $Base"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Мне не обязательно нужно обобщенное решение. Мне нужно только найти значение числа, возведенного в степень 2.4
.
Я попытался разбить свою проблему следующим образом:
x ^ (2.4) = (x ^ 2) * (x ^ 0.4)
= (x ^ 2) * (x ^ (2/5))
= (x ^ 2) * ((x ^ 2) ^ 1/5)
Найти квадрат x
можно, поэтому моя проблема сводится к вычислению «пятого корня» числа.
Я также думал разбить свою проблему на логарифмическое уравнение, но ничего не достиг.
Я думаю написать код, реализующий метод вычисления корней методом длинного деления, но это кажется крайне неэффективным и неэлегантным.
Может ли кто-нибудь предложить мне более простой и эффективный способ решения моей проблемы? Если нет, то кто-нибудь пробовал кодировать метод вычисления корней методом длинного деления?
Заранее спасибо!!
Примечание: это шаблон, который я буду использовать много раз в своем исполнении, поэтому эффективность для меня тем более важна.