XCAS float precision
10-04-2018, 02:52 PM (This post was last modified: 10-04-2018 03:17 PM by Albert Chan.)
Post: #1
 Albert Chan Senior Member Posts: 2,096 Joined: Jul 2018
XCAS float precision
I finally join the club, and downloaded XCas (for Windows 32-bits)

If XCas float default is IEEE double precision, I should get this:

Python: 3.141592653589794 - 3.141592653589793 => 8.88e-16

This is above in hex-float, where ULP = 2^-51 ~ 4.44e-16:
0x1.921fb54442d1aP1 - 0x1.921fb54442d18P1 = 2 ULP ~ 8.88e-16

Instead, I get something unexpected, suggesting XCas uses 54-bits float (or more)
(Also, returned float is not normalized, with a zero before decimal point)

XCAS: 3.141592653589794 - 3.141592653589793 => 0.111e-14 (2.5 ULP ?)

Just to confirm above with 54-bits float math (now, ULP = 2^-52)

0x1.921fb54442d1a0P+1 - 0x1.921fb54442d178P+1 = 5 ULP ~ 1.11E-15 (match above)
10-04-2018, 07:22 PM
Post: #2
 parisse Senior Member Posts: 1,243 Joined: Dec 2013
RE: XCAS float precision
Xcas is using longfloats (via MPFR) for representation of floats having more than 14 digits.
10-04-2018, 09:36 PM
Post: #3
 Albert Chan Senior Member Posts: 2,096 Joined: Jul 2018
RE: XCAS float precision
(10-04-2018 07:22 PM)parisse Wrote:  Xcas is using longfloats (via MPFR) for representation of floats having more than 14 digits.

Thanks you. It now make sense.

pibf := 3.141592653589793 // bigfloat
pi53 := 3.141592653 + 5.89793-10 // machine float

evalf(pibf, 20) => 3.1415926535897928940 // big float confirmed
evalf(pi53, 20) => 3.14159265359 // pi53 is 0.5 ULP bigger than pibf

It seems when big float mixed with machine float, big-float is "demoted".

evalf(pibf + 0.0, 20) => 3.14159265359
pibf - pi53 //==> 0.0

pibf == pi53 //==> true, big float demoted before comparison.
10-05-2018, 06:04 PM
Post: #4
 parisse Senior Member Posts: 1,243 Joined: Dec 2013
RE: XCAS float precision
Indeed. Mixing floats and long floats will convert long float to float.
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)