[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: RE: sqrt ("pure" XSLT solution)

Subject: Re: RE: sqrt ("pure" XSLT solution)
From: "Kurt Cagle" <cagle@xxxxxxxxx>
Date: Mon, 13 Aug 2001 13:19:42 -0700
square root xslt
Ah, Taylor sequences! You can use them for calculating sin() and cos()
values too (x - x^3/3! + x^5/5! - x^7/7! + ...) and (1 - x^2/2! + x^4/4! -
x^6/6! +...), and can get the tangent from sin()/cos(). Admittedly, your
accuracy is likely not to be great if you want anything approaching real
time computation, but usually you can get away with four terms of
calculation.

-- Kurt
----- Original Message -----
From: "Nate Austin" <naustin@xxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Monday, August 13, 2001 12:26 PM
Subject:  RE: sqrt ("pure" XSLT solution)


> > Date: Mon, 13 Aug 2001 00:44:34 -0700 (PDT)
> > From: edouard panie <edpanie@xxxxxxxxx>
> > Subject: [none]
> >
> > Hi,
> >
> > I need to use a sqrt() math function in a XSL/SVG
> > style sheet. Knowing that I use a Saxon processor
> >
> > Here is the header I had before (when it worked!, but
> > with out sqrt()):
> >
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet version="1.0"
> > extension-element-prefixes="saxon"
> >   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> >   xmlns:saxon="http://icl.com/saxon">
> >
> >
> > I tried with EXSLT, I downloaded math.sqrt.msxsl.xsl
> > and math.sqrt.js, put them in the same directory as my
> > xsl stylesheet but it doesn't work!
> > This is what I tried, but when I run the saxon
> > processor, it gives errors: the processor doesn't
> > recognize the SVG tags anymore! I don't understand
> > what's wrong, can someone give me a hint?
> >
> >
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <stylesheet
> > xmlns="http://www.w3.org/1999/XSL/Transform"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > xmlns:saxon="http://icl.com/saxon"
> > xmlns:func="http://exslt.org/functions"
> > xmlns:math="http://exslt.org/math" version="1.0"
> > extension-element-prefixes="math func saxon"
> > math:doc="http://www.exslt.org/math">
> >
> >    <import href="math.sqrt.msxsl.xsl"/>
> >    <func:script language="exslt:javascript"
> > implements-prefix="math" src="math.sqrt.js"/>
> >    <script implements-prefix="math" src="math.sqrt.js"
> > language="javascript"/>
> > </stylesheet>
> >
> >
> >
> >
> > Thanks for your help
> > Ed
>
> Ed -
>
> Here's a solution to your problem using an implementation of Newton's
method
> for finding square roots.  Benefit:  Processor independant (no extension
> functions)
> Drawback:  Probably slightly slower, at times will leave a number hanging
on
> at the end (using the example I have here, 2761.5025 should return 52.55
but
> instead 52.550000000000004 is returned.  This will mostly go away with a
> higher 'max iteration' count, but there may always be some special cases
> that should be rounded off.)
> Call it as shown below:
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:template match="/">
>   <html><body>
>   <xsl:call-template name="sqrt">
>     <xsl:with-param name="num" select="2761.5025"/>
>   </xsl:call-template>
>   </body>
>   </html>
> </xsl:template>
>
> <xsl:template name="sqrt">
>   <xsl:param name="num" select="0"/>  <!-- The number you want to find the
> square root of -->
>   <xsl:param name="try" select="1"/>  <!-- The current 'try'.  This is
used
> internally. -->
>   <xsl:param name="iter" select="1"/> <!-- The current iteration, checked
> against maxiter to limit loop count -->
>   <xsl:param name="maxiter" select="10"/>  <!-- Set this up to insure
> against infinite loops -->
>
>   <!-- This template was written by Nate Austin using Sir Isaac Newton's
> method of finding roots -->
>
>   <xsl:choose>
>     <xsl:when test="$try * $try = $num or $iter &gt; $maxiter">
>       <xsl:value-of select="$try"/>
>     </xsl:when>
>     <xsl:otherwise>
>       <xsl:call-template name="sqrt">
>         <xsl:with-param name="num" select="$num"/>
>         <xsl:with-param name="try" select="$try - (($try * $try - $num)
div
> (2 * $try))"/>
>         <xsl:with-param name="iter" select="$iter + 1"/>
>         <xsl:with-param name="maxiter" select="$maxiter"/>
>       </xsl:call-template>
>     </xsl:otherwise>
>   </xsl:choose>
> </xsl:template>
>
> </xsl:stylesheet>
>
>
> Here's the XML file I used to test it with IE5.5 + MSXML4 in replace mode:
>
> <?xml version="1.0"?>
> <?xml-stylesheet type="text/xsl" href="sqrt.xsl"?>
> <nub/>
>
> Hope that helps,
>
> Nate
> naustin@xxxxxxxxxx
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.