Domanda

solo curioso! ma ho notato che il valore di π detenuta da SAS è di fatto corretta.

Per esempio:

data _null_;
x= constant('pi') * 1000000000000000000000000000;
put x= 32.;
run;

dà un valore di π di (3) 141592653589792961327005696

tuttavia - π è naturalmente (3.) 1415926535897932384626433832795 ( http://www.joyofpi.com /pi.html ) - al 31 dp

.

ciò che dà ?? !!

È stato utile?

Soluzione

SAS esercizi PI come costante a 14 cifre decimali. La differenza che state vedendo è un artefatto di matematica in virgola mobile quando hai fatto il passo moltiplicazione.

data _null_;
    pi=constant("PI");
    put pi= 32.30;
run;

/ * On Log * /

pi=3.141592653589790000000000000000

Altri suggerimenti

PI si svolge come una costante in tutti i linguaggi di programmazione ad una precisione insieme. Esso non viene calcolato. Il tuo codice espone quanto sia accurata PI è in SAS.

Hai 16 cifre di precisione. Il che significa che probabilmente utilizza un href="http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers" rel="nofollow IEEE 754 a precisione doppia virgola mobile rappresentazione , che dà solo circa 16-17 cifre decimali di precisione. È impossibile per π per essere rappresentato in qualsiasi numero finito di cifre, in modo che qualsiasi rappresentazione informatica sta per essere troncato ad un certo numero di cifre. Ci sono modi di fare matematica precisione arbitraria (Java ha una classe BigDecimal), ma anche allora si avrebbe dovuto troncare π da qualche parte. E la matematica fatto in questo modo è di diversi ordini di grandezza più lento (perché non è gestita da istruzioni della CPU diretti).

Come ha detto Garry Shutler, è tenuto come una costante. Si noti che che le piccole valori frazionari nei tipi numerici di linguaggi di programmazione sono raramente tutto ciò che precisa (in realtà, la loro precisione può essere inferiore al loro precisione), perché sono memorizzati come molto buone approssimazioni che possono essere manipolati in modo rapido. Se avete bisogno di precisione eccellente (come negli sforzi scientifici e finanziari), è necessario utilizzare i tipi speciali come BigDecimal di Java che gestiscono essere completamente accurata (a costo di velocità di calcolo). (Scusate, non so SAS quindi non so di un analogo per BigDecimal.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top