axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] special functions


From: Bill Page
Subject: [Axiom-developer] special functions
Date: Tue, 31 Jan 2006 13:04:15 -0500


-----Original Message-----
From: Bill Page [mailto:address@hidden 
Sent: January 31, 2006 11:44 AM
To: 'Vanuxem Grégory'
Subject: RE: [Axiom-math] special functions


Grégory,

On January 31, 2006 6:15 AM you wrote:
> 
> I have modified your spad code in SandBoxGamma.
> The problem come from the fact that 1 and 0 are functions.
> I don't really understand why but that's work now.

Thank you! Yes, I think you are right. In this case in SPAD
it appears necessary to distinguish between '1.0' and '1'. As
I understand it in the Axiom interpreter '1.0' is actually
translated as the function 'float(1,0,10)$Domain' and '0.0' as
'float(0,0,10)$Domain' while '1$Domain' is always defined as
the multiplicative identity and '0$Domain' is the additive
identity in any Domain (if it exists). It seems that the SPAD
compiler does not quite get this right without a little more
help.

You were very clever to realize this! :)

> I suggest to change EPS to 1e-15 since it's double and not
> float
> 

Yes you are right. For the domain Float the EPS is adjustable so
we really should compute it, perhaps like this:

(1) -> EPS := (10.0^(-digits()$Float))$Float

   (1)  0.1 E -19
                                             Type: Float

That's the default value but the precision can be adjusted
for example:

(2) -> digits(400)$Float

   (2)  20
                                    Type: PositiveInteger

(3) -> EPS := (10.0^(-digits()$Float))$Float

   (3)  0.1 E -399
                                              Type: Float

But the precision of DoubleFloat is fixed by the machine
representation:

(4) -> digits()$DoubleFloat

   (4)  15
                                    Type: PositiveInteger

(5) -> (1.0+10.0^(-digits()$DoubleFloat)=1.0)$DoubleFloat

   (5)  false
                                              Type: Boolean

(6) -> (1.0+10.0^(-digits()$DoubleFloat-1)=1.0)$DoubleFloat

   (6)  true
                                              Type: Boolean

I have a little more trouble deciding on the value of FPMIN.
In principle in the Float domain there is no minimum floating
point value since the exponent is represented by an arbitrary
precision integer.

In the domain DoubleFloat is seems that FPMIN is approximately:

(7) -> (10.0^-323=0)$DoubleFloat

   (7)  false
                                             Type: Boolean

(8) -> (10.0^-324=0)$DoubleFloat

   (8)  true
                                             Type: Boolean

Is there any Axiom function like 'digits' that I could call to
determine this value?

Anyway, I modified the example at

  http://wiki.axiom-developer.org/SandBoxGamma

to test these values and they seem to work.

Thanks again.

Regards,
Bill Page.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]