Nano Hash - криптовалюты, майнинг, программирование

Как рассчитать мощность числа с десятичной степенью в XSLT 1.0?

Я ищу решение для вычисления степени числа с десятичной степенью в 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 можно, поэтому моя проблема сводится к вычислению «пятого корня» числа.

Я также думал разбить свою проблему на логарифмическое уравнение, но ничего не достиг.

Я думаю написать код, реализующий метод вычисления корней методом длинного деления, но это кажется крайне неэффективным и неэлегантным.

Может ли кто-нибудь предложить мне более простой и эффективный способ решения моей проблемы? Если нет, то кто-нибудь пробовал кодировать метод вычисления корней методом длинного деления?

Заранее спасибо!!

Примечание: это шаблон, который я буду использовать много раз в своем исполнении, поэтому эффективность для меня тем более важна.

29.08.2014

  • Проверьте, соответствует ли код, представленный в fxsl.sourceforge.net/articles/xslCalculator/ можно адаптировать к вашим потребностям или проверить, позволяет ли ваш XSLT-процессор вызывать функцию расширения на другом языке, таком как Java или C#, например, где вы могли бы затем вызвать математическую функцию. 29.08.2014
  • x ^ 2.4 не то же самое, что (x ^ 2) * (x ^ 0.4), но на самом деле (x ^ 0.2) ^ 12 (потому что 2,4 = 12/5). 29.08.2014
  • @TimC, мы оба правы. я просто пытался сделать это как можно проще. 29.08.2014
  • @MartinHonnen, я уже пробовал это. Работает только с XSLT 2.0 29.08.2014
  • Я не проверял детали, но FXSL существует в версиях XSLT 1.0 и 2.0. 29.08.2014
  • @MartinHonnen хорошо, я проверю еще раз, но, кажется, я помню, что у меня это тоже не работало раньше, может быть, по какой-то другой причине. 29.08.2014

Ответы:


1

Ваш процессор не поддерживает функцию расширения EXSLT math:power()? Следующая таблица стилей:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="math">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:variable name="num" select="32" />

<xsl:template match="/">
    <output>
        <xsl:value-of select="math:power($num, 2.4)" />
    </output>
</xsl:template>

</xsl:stylesheet>

вернется:

libxslt:

<?xml version="1.0" encoding="UTF-8"?>
<output>4096</output>

Саксон 6.5/Ксалан:

<?xml version="1.0" encoding="UTF-8"?>
<output>4095.9999999999986</output>
30.08.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..