$ gpκαι το σύστημα ανταποκρίνεται με
GP/PARI CALCULATOR Version 2.1.4 (released) i686 running linux (ix86 kernel) 32-bit version (readline v4.1 enabled, extended help available) Copyright (C) 2002 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?12 for how to get moral (and possibly technical) support. realprecision = 28 significant digits seriesprecision = 16 significant terms format = g0.28 parisize = 4000000, primelimit = 500000 ?και είναι έτοιμο να δεχτεί εντολές. Στο ερωτηματικό δίνουμε για παράδειγμα την εντολή
?Piοπότε πέρνουμε ως απάντηση το
%1 = 3.141592653589793238462643383 ?Μπορούμε να ορίσουμε με πόσα δεκαδικά σημαντικά ψηφία θέλουμε να γίνουν οι υπολογισμοί. Έτσι δίνουμε
? \p 1500 realprecision = 1502 significant digits (1500 digits displayed) ? Pi %2 = 3.1415926535897932384626433832795028841971693993751058209749445923078164 06286208998628034825342117067982148086513282306647093844609550582231725359408 12848111745028410270193852110555964462294895493038196442881097566593344612847 56482337867831652712019091456485669234603486104543266482133936072602491412737 24587006606315588174881520920962829254091715364367892590360011330530548820466 52138414695194151160943305727036575959195309218611738193261179310511854807446 23799627495673518857527248912279381830119491298336733624406566430860213949463 95224737190702179860943702770539217176293176752384674818467669405132000568127 14526356082778577134275778960917363717872146844090122495343014654958537105079 22796892589235420199561121290219608640344181598136297747713099605187072113499 99998372978049951059731732816096318595024459455346908302642522308253344685035 26193118817101000313783875288658753320838142061717766914730359825349042875546 87311595628638823537875937519577818577805321712268066130019278766111959092164 20198938095257201065485863278865936153381827968230301952035301852968995773622 59941389124972177528347913151557485724245415069595082953311686172785588907509 83817546374649393192550604009277016711390098488240128583616035637076601047101 81942955596198946767837449448255379774726847104047534646208046684259069491293 31367702898915210475216205696602405803815019351125338243003558764024749647326 39141992726042699227967823547816360093417216412199245863150302861829745557067 4983850549458858692699569092721079750930295 ?Το pari ξέρει και από συναρτήσεις, έτσι ας δώσουμε
? (x^3-1)/(x-1) %3 = x^2 + x + 1ή ας υπολογίσουμε την σειρά Taylor του .
taylor(sin(x),x) %4 = x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 - 1/39916800*x^11 + 1/6227020800*x^13 - 1/1307674368000*x^15 + O(x^16)Αν δώσουμε
? 2/6 %5 = 1/3Παρατηρήστε ότι στο τελευταίο αποτέλεσμα απλοποιήθηκε το κλάσμα, αλλά δεν υπολόγισε την δεκαδική παράσταση του ενός τρίτου. Αυτό είναι χαρακτηριστικό των προγραμμάτων που κάνουν πράξεις συμβολικά σε αντίθεση με τους υπολογισμούς κινητής υποδιαστολής. Για να δούμε τα πλεονεκτήματα των ακριβών υπολογισμών ας υπολογίσουμε την ορίζουσα ενός πίνακα του Hilbert με ακριβή τρόπο και με υπολογισμό κινητής υποδιαστολής
? \p 8 realprecision = 8 significant digits ? a=mathilbert(20); ? matdet(a)*1. %6 = 4.2061789 E-226 ? matdet(a*1.) %7 = 2.3821891 E-147Τα αποτελέσματα δεν έχουν καμία σχέση! Όπως θα μάθετε σε ένα μάθημα Αριθμητικής Ανάλυσης, οι πίνακες του Hilbert έχουν κακή κατάσταση και οι πράξεις με αυτούς δεν δίνουν αξιόπιστα αποτελέσματα σε υπολογισμούς κινητής υποδιαστολής.
Ας κάνουμε έναν υπολογισμό ανάλυσης σε πρώτους παράγοντες
? # timer = 1 (on) ? factor(12345672349872349823749823749238479238473298472398) time = 450 ms. %8 = [2 1] [124769 1] [49040951 1] [24614186399893 1] [40985825646594117516397 1]Ο ειδικός χαρακτήρας που δόθηκε στην πρώτη γραμμή έχει σαν αποτέλεσμα το πρόγραμμα να μετράει τον χρόνο που έκανε για να πραγματοποιήσει ένα υπολογισμό. Το αποτέλεσμα της παραγοντοποίησης του
Να δούμε ένα ποιο σύνθετο παράδειγμα το οποίο είναι ένα προγραμματάκι που υπολογίζει τους πρώτους αριθμούς του Mersenne, δηλαδή τους πρώτους αριθμούς της μορφής για . (ας σημειωθεί ότι ο μεγαλύτερος από αυτούς δηλαδή ο είναι αριθμός με δεκαδικά ψηφία.
? for(x=1,200,if(isprime(2^x-1),print(2^x-1))) 3 7 31 127 8191 131071 524287 2147483647 2305843009213693951 618970019642690137449562111 162259276829213363391578010288127 170141183460469231731687303715884105727Από ότι βλέπετε δεν υπάρχουν και πολλοί πρώτοι του Mersenne Η λογική του προγράμματος αυτού είναι να διατρέξουμε όλους τους αριθμούς από το 1 μέχρι το 200 και να τυπώσουμε στην οθόνη μόνο τους πρώτους.
Το pari έχει ενσωματωμένο σύστημα βοήθειας. Έτσι δίνοντας ένα ερωτηματικό σαν εντολή μας εμφανίζει μια λίστα με τις συναρτήσεις που καταλαβαίνει, ενώ με ερωτηματικό ακολουθούμενο από μία εντολή μας δίνει την ακριβή της σύνταξη
? ?factor factor(x,{lim}): factorization of x. lim is optional and can be set whenever x is of (possibly recursive) rational type. If lim is set return partial factorization, using primes up to lim (up to primelimit if lim=0).