Opened 9 years ago

Closed 3 years ago

#9937 closed defect (invalid)

PARI real precision is broken in many ways

Reported by: jdemeyer Owned by: was
Priority: major Milestone: sage-duplicate/invalid/wontfix
Component: interfaces Keywords: pari gp real precision set_real_precision
Cc: Merged in:
Authors: Reviewers: Jeroen Demeyer
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description (last modified by jdemeyer)

The following do not work as they should (try these examples with a freshly started copy of Sage, such that everything is default).

This is definately a bug with the initialization of the precision:

# Default: 2 significant words (while we really should get only 1)
sage: pari('Pi').debug()
[&=0000000004fc9620] REAL(lg=4):0400000000000004 (+,expo=1):6000000000000001 c90fdaa22168c234 c4c6628b80dc1cd1

# Change precision and then change it back: we get 1 word
sage: n = pari.get_real_precision(); pari.set_real_precision(100); pari.set_real_precision(n);
sage: pari('Pi').debug()
[&=00000000012bf200] REAL(lg=3):0400000000000003 (+,expo=1):6000000000000001 c90fdaa22168c235

set_real_precision() seems to affect essentially only the precision for evaluating strings in PARI and not much else:

sage: pari.set_real_precision(50);
sage: pari('Euler')   # Precision changes
0.57721566490153286060651209008240243104215933593992
sage: pari.euler()    # Precision does NOT change
0.5772156649015328607

This last behaviour is actually documented in sage/libs/pari/gen.pyx:

Unless otherwise indicated in the docstring, most Pari functions that return inexact objects use the precision of their arguments to decide the precision of the computation. However, if some of these arguments happen to be exact numbers (integers, rationals, etc.), an optional parameter indicates the precision (in bits) to which these arguments should be converted before the computation. If this precision parameter is missing, the default precision of 53 bits is used.

In other words, the default precision is an unchangable 53 bits. I would expect set_real_precision() to change this. This is also trivial to implement since the global variable prec is already there (and initialized once and for all to 53).

Attachments (1)

9937_pari_prec.patch (77.4 KB) - added by jdemeyer 8 years ago.

Download all attachments as: .zip

Change History (17)

comment:1 Changed 9 years ago by jdemeyer

  • Description modified (diff)

comment:2 Changed 9 years ago by jdemeyer

  • Description modified (diff)
  • Keywords set_real_precision added

comment:3 follow-up: Changed 9 years ago by cremona

There's a lot of relevant information written by Alex Ghitza and me a couple of years ago in the file gen.pyx. Yes, it is counterintuitive; but not undocumented.

comment:4 in reply to: ↑ 3 Changed 9 years ago by jdemeyer

Replying to cremona:

There's a lot of relevant information written by Alex Ghitza and me a couple of years ago in the file gen.pyx. Yes, it is counterintuitive; but not undocumented.

I know it is documented (although not too clearly), but the question is: does it make sense? (In my opinion: no).

comment:5 Changed 9 years ago by jdemeyer

More precisely: this is counter-intuitive:

sage: pari.set_real_precision(100);
sage: pari('Euler')   # Precision changes
0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495
sage: pari.euler()    # Precision does NOT change
0.5772156649015328607

comment:6 Changed 9 years ago by jdemeyer

  • Description modified (diff)

comment:7 Changed 9 years ago by jdemeyer

  • Description modified (diff)

comment:8 Changed 9 years ago by jdemeyer

  • Authors set to Jeroen Demeyer
  • Status changed from new to needs_work

comment:9 Changed 9 years ago by jdemeyer

  • Description modified (diff)

comment:10 Changed 8 years ago by jdemeyer

  • Dependencies set to #11130, #11321
  • Description modified (diff)
  • Milestone changed from sage-4.7.2 to sage-pending

comment:11 Changed 8 years ago by jdemeyer

  • Dependencies changed from #11130, #11321 to #11130, #11321, #11130, #11321, #11904

comment:12 Changed 8 years ago by jdemeyer

  • Dependencies changed from #11130, #11321, #11130, #11321, #11904 to #11854, #11130, #11321, #11130, #11321, #11904

comment:13 Changed 8 years ago by jdemeyer

  • Dependencies changed from #11854, #11130, #11321, #11130, #11321, #11904 to #11854, #11130, #11321, #11891, #11890, #11836, #11904

comment:14 Changed 8 years ago by jdemeyer

  • Dependencies changed from #11854, #11130, #11321, #11891, #11890, #11836, #11904 to #11854, #11130, #11321, #11891, #11890, #11836, #11952, #11904

comment:15 Changed 8 years ago by jdemeyer

  • Dependencies #11854, #11130, #11321, #11891, #11890, #11836, #11952, #11904 deleted

Changed 8 years ago by jdemeyer

comment:16 Changed 3 years ago by jdemeyer

  • Authors Jeroen Demeyer deleted
  • Milestone changed from sage-pending to sage-duplicate/invalid/wontfix
  • Resolution set to invalid
  • Reviewers set to Jeroen Demeyer
  • Status changed from needs_work to closed
Note: See TracTickets for help on using tickets.