xsl-list
[Top] [All Lists]

Re: [xsl] Is this the best way to compute a sigmoid function?

2020-05-02 16:34:06
It's a long time (almost 50 years!) since I studied numerical methods as an 
undergraduate, and while David Wheeler could be an incredibly boring lecturer, 
I do recall him demonstrating how repetitive numerical calculations could lose 
precision at an alarming rate. So the reason we calculate to 15 digits is not 
that we need 15 digits in the final answer, but rather because the errors 
accumulate, so if we want 5 digits in the final answer, we may need 15 digits 
in the intermediate steps.

Michael Kay
Saxonica

On 2 May 2020, at 21:53, John Lumley 
john(_dot_)lumley(_at_)btinternet(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Apart from determining the value of G or the fine constant, or a few other 
esoteric determination of funadamental constants, what practical issues 
require more than 7-8 significant figures of precision?

Yes, some interplanetary differentials might at times. (Our moon recedes from 
us as fast as your fingernails grow, and GPS internals can need 
sub-nanosecond differential time intervals) but what ones we might encounter 
in the XML world.

The ‘fetish’ of chasing decimal places in most, but not all, cases shows a 
lack of understanding of the essence of the problem.

The (artificial) epitome of this is the well-trodden problem of a railway 
around the world that must be lifted up 1 cm, but stays circular... how much 
more rail is needed?
‘Where angels fear to tread’ rush in with finding the difference by
 2*pi*6,357,000.01 - 2*pi*6,357,000
which requires 9-10 places of numerical precision (i.e. approaching 30 bits 
of mantissa) neglecting the deeper structure of the mathematics..

John Lumley
john(_at_)johnlumley(_dot_)net

On 2 May 2020, at 19:09, Michael Kay mike(_at_)saxonica(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:



On 2 May 2020, at 18:55, Costello, Roger L. costello(_at_)mitre(_dot_)org 
<mailto:costello(_at_)mitre(_dot_)org> 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com 
<mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>> wrote:


I want to compute the result of evaluating this sigmoid function:

    1
----------------
(1 + e**-x)

That is, compute 1 divided by (1 + e raised to the -x power)

In recent versions of XPath, you can simply do 

(1 div (1 + math:exp(-$x)))

(However, it already appears to be mighty accurate -- look at all those 
digits to the right of the decimal point)

I hope you don't seriously believe that precision implies accuracy - that 
someone who claims the population of the world is 7,345,651,523 is more 
likely to be right than someone who says it is 7 billion.

Notice that for the variable $e-to-the-minus-x-power I specified it this 
way: as="xs:decimal". Should I have specified it this way: as="xs:float" 
instead? 

For calculations like this it's best to use xs:double. You don't need any 
more precision than this, and exponential/trigonometric functions are likely 
to be implemented as double-precision floating point by whatever underlying 
library is used.

Michael Kay
Saxonica
XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/949522> (by 
email <applewebdata://2896573D-12DF-4038-BCB1-7D3643583865>)

XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by 
email <>)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>