Newsgroup: it.comp.lang.c
Titolo: Algoritmi numerici libreria standard

Scusate l'intromissione se la mia domanda è OT, 
ma mi è sorta una curiosità che, nonstante piu' 
di un paio di ore di ricerche in rete, non sono riuscito
a soddisfare:
Quali algoritmi vengono implementati nella libreria
matematica standard?
Lasciando stare le operazioni aritmetiche, le funzioni
trigonometriche (e iperboliche) come vengono calcolate?
Premetto che non ho ancora capito se la libreria standard
è standard nell'interfacca o anche negli algoritmi. Se
gli algoritmi cambiano da produttore a produttore, allora
il mio interesse è per le librerie fornite con Bcc55,
 MSVC e GCC.
In ogni caso prima ancora che una descrizione degli algoritmi,
ora sono interessato alla questione: dove li posso trovare descritti
in rete o su carta? O sono dei segreti industriali???
ciao, grazie

 in rete o su carta? O sono dei segreti industriali???
Lo standard distingue tre casi:
- cosa deve essere fatto, e in tal caso ne indica anche l'interfaccia
- cosa e' lasciato alla specifica implementazione (e in alcuni casi ti 
  spiega il perche')
- tutto il resto, a condizione che non conflitti con quanto sopra, puo' 
  essere implementato come pare e piace (o nel rispetto di altri standard, 
  ma non ci interessa ora).
Il modo di implementare l'algoritmo e' lasciato alla discrezione di chi 
implementa la libreria, a condizione che ne mantenga l'interfaccia.
Il fatto che siano o meno segreti, dipende appunto dalla libreria stessa e 
dal produttore.
La Libreria C della GNU e' rilasciata sotto LGPL (quindi obbligatoriamente 
con i sorgenti, se non fossi pratico con questa licenza) e trovi anche 
un'eccellente documentazione sui dettagli implementativi.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 MSVC e GCC.
   Non credo che quelli utilizzati da Microsoft e Borland siano
pubblici, comunque considera che di solito la maggior parte dei
calcoli in virgola mobile sono realizzati, in hardware, dagli appositi
(co)processori.
   Anni fa feci una prova su 386/387 con Borland C++, utilizzando
alternativamente la libreria software e il coprocessore. A parte le
ovvie differenze di prestazioni, i risultati dei vari calcoli provati
erano assolutamente identici (bit per bit). In effetti la libreria di
quel compilatore si comportava come una fedele realizzazione software
delle specifiche del 387 Intel.
   Credo che il vantaggio di una simile scelta fosse l'assoluta
uniformita` di comportamento dei programmi, sia in presenza che in
assenza del coprocessore matematico.
-- 
S.L.

 trigonometriche (e iperboliche) come vengono calcolate?
innanzitutto,
grazie a chi ha risposto al mio posto precedente.
Per la cronaca:
sono andato a spulciarmi la GNU C library
e ho trovato questo: 
per calcolare sin(x) si passa attraverso
il calcolo di (sin(x) - x)/x 
che viene approssimato con un polinomio
di quinto grado calcolato in x^2 (quindi un polinomio di 
decimo grado in x).
I coefficienti del polinomio sono determinati con un algoritmo
di Remez speciale ("special Remez algorithm" nell'originale).
Che, secondo Weisstein world of mathematics, č un tipo particolare
di algoritmo minmax.
MA ALLA FINE: quando calcolo sin(x) in un programma scritto in C,
posso contare sul fatto che l'errore tra il risultato esatto 
e quello che restituisce la macchina sia piů piccolo della
precisione usata?
intendo dire: piů piccolo ad esempio di 2^-52 se sto usando
i double secondo l'IEEE 754.
Nel file della library che ho guardato dice:
 * Accuracy:
 *	In the absence of rounding error, the approximation has absolute error 
 *	less than 2**(-61.11) for VAX D FORMAT, 2**(-57.45) for IEEE DOUBLE.
e non capisco che cosa voglia dire: č proprio il rounding error che
dipende dal formato numerico (intendo dire: IEEE DOUBLE oppure VAX D FORMAT)!
Quale altro errore dipende dal formato numerico?
Escluso il rounding error dovrebbe intervenire solo l'errore teorico dovuto
all'approssimazione polinomiale, per quanto ne so.

 dovuto all'approssimazione polinomiale, per quanto ne so.
Forse vuole dirti che l'errore di approssimazione dovuto all'uso di un 
polinomio interpolatore e' quella indicata (se ho capito come funziona 
l'algoritmo... non era nel programma di calcolo numerico e piu' di tanto 
non ho studiato il calcolo delle funzioni trigonometriche).
Ovviamente, se la soluzione esatta non puo' essere rappresentata in un 
numero in virgola mobile, l'errore aumenta, ma l'algoritmo non puo' 
prevederlo... cosi' come non puo' prevedere precedenti errori di 
arrotondamento.
A me pare voglia dirti questo, ma sarei lieto di essere contraddetto in 
materia, da qualcuno di piu' preparato.


Salve,
ho appena iniziato la studio dei cgi, ho installato APACHE V1.3.23 x Win9X
e in fase d'installazione ho imposto i seguenti parametri:
A)  Network Domain: 
pippo.it
B)  ServerName:127.0.0.1
Nel file httpd.conf trovo:
1)     DocumentRoot "C:/Programmi/Apache Group/Apache/htdocs"
Allora in tale directory dovrò mettere le mie (semplicissime) pagine .html
e le richiamerò dal browser come:localhost/nome_pagina.html oppure come
localhost/Direct1/nome_pagina.html se questa risiede nella directory
C:/Programmi/Apache Group/Apache/htdocs/Direct1
(con quest'indirizzo la pagina mi viene correttamente visualizzata).  Giusto?
2) ScriptAlias /cgi-bin/ "C:/Programmi/Apache Group/Apache/cgi-bin/"
Allora in tale directory metterò gli script anzi gli eseguibili (ho Windows98)
che la mia pagina   html "invocherà" con una sintassi del tipo:
"<FORM NAME=codice METHOD=GET ACTION=/cgi-bin/provacgi.exe"?.
Giusto?No, visto che questa è la mia situazione e che cliccando
sul tasto submit della mia pagina la risposta che ottengo è:
"Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.    etc....   "
Qualcuno sa indicarmi come risolvere il problema?
Grazie,
                                                   Chef



 
Forse ho capito...
premetto che ieri non sono stato chiaro sul fatto che i coefficienti
del polinomio sono calcolati a priori e inseriti nel codice
della funzione come delle costanti.
Forse il commento della funzione intende dire che, a priori,
il polinomio che viene usato ha quell'errore massimo teorico: 
questo errore dipende dal formato numerico
usato appunto perchè sono i coefficienti del polinomio che vengono 
effettivamente usati a dipendere dal formato numerico (in quanto
arrotondati in base a questo).
Naturalmente farebbe piacere anche a me essere contraddetto
da qualcuno piu' esperto.
ciao,
Aldo
P.S.
A scanso di equivoci con eventuali conoscitori del codice
sorgente della libreria in questione, il file che sono andato
a vedere è piuttosto vecchio: del 1994 (per questioni di 
velocità di download, ho scaricato una versione vecchia 
e piccola, non l'ultima versione da 17MB, contando sul fatto che le 
funzioni piu' elementari non fossero state modificate nel frattempo).