Newsgroup: it.comp.lang.c++
Titolo: Announce of new C++ library to handle measures

I am developing an open-source header-only multi-platform C++11 library 
to handle physical measures and angles.
Now it has reached a good-enough maturation level to need some real user 
feedback.
 
You can browse or download sources here:
https://github.com/carlomilanesi/cpp-measures
 
 
You can browse documentation here:
https://github.com/carlomilanesi/cpp-measures/wiki
 
and particularly here:
https://github.com/carlomilanesi/cpp-measures/wiki/Tutorial
 
 
-- 
 
Carlo Milanesi
http://carlomilanesi.wordpress.com/
 

 
 
Ciao,
 
visto che siamo un un NG italiano rispondo in italiano :)
 
Come prima cosa complimenti per aver messo la lib online: so per esperienza
quanto sudore e fatica bisogna fare anche per la più piccola stupidaggine,
non parliamo delle cose che abbiamo a cuore. Averle messe open su github è
meglio ancora ;)
 
Da qui in poi ti parlo da sviluppatore, senza troppi giri di parole, come se
stessi parlando della libreria di qualcun'altro - so che non hai bisogno
di complimenti ma di critiche costruttive.
 
Inizio da due cose veramente stupide, ma che danno noia a chi come me vede
il progetto nei primi cinque minuti:
- nell'albero del progetto son mischiati header (la lib) e i test: non si
capisce cos'è cosa, e, anche se c'è nella documentazione, molti (tipo me) prima
ancora di leggere i doc provano a leggere il codice!
- c'è il build dei test solo per Win! Qui su linux ho provato a compilare un
test ma mi da un errore su un parametro di una open ifstream, che fa pensare
al fatto che potrebbe non essere troppo compatibile (ma, come ti ho detto, non
ho provato, per cui non so)
 
Per quanto riguarda il concetto.. boh, prendi tutto quelle che viene con le
pinze, perché è un mio parere personale.
Lavorare con una libreria del genere per me sarebbe impossibile, perché mette
dei paletti assurdi sia su algoritmi sia conti comuni.
- le unità di misura sono utili per i fisici quando fanno analisi dimensionali,
ma normalmente chiunque le lascia perdere, per i motivi che seguono (senza
contare che e anche a mano i fisici spesso mettono a 1 le dimensioni che gli
"danno noia" - in relatività speciale, ad esempio le lunghezze son numeri
puri!)
- la maggior parte dei conti che devi fare con un calcolatore sono, a parte
i conti base, roba di derivazione e integrazione: ma visto che solo dai conti
non è possibile sapere "cos'è quella moltiplicazione lì" significa che 
bisogna fare cast a mano delle unità di misura ogni volta, che rende inutile
l'enforcing delle unità da parte del compilatore in primo luogo
- per un programmatore è più che comune avere a che fare con errori in
virgola mobile dovuti alla perdita di precisione: moltiplicare o dividere per
qualche costante non basta, a volte è necessario lavorare in più riferimenti
diversi con unità diverse, e vedere un listatone di unità senza significato
fisico sarebbe illeggibile.
- lavorare con matrici per rotazioni o traslazioni, diventa un incubo, anche
perché
- avere una struttura non "standard" per i vettori comporta un lavoro solo
per far parlare la tua libreria con altre!
 
Come ho detto, questo è il pensiero mio, e magari hai già pensato a come
risolvere tutte le cose che ho scritto sopra, ma questa è l'impressione ad
una prima lettura.
 
M2C
Ciao!

 Ciao!
 
Ciao e grazie ancora.


 
 
Grazie a te della lib! Adesso che la conosco, la prossima volta che mi
capiterà un problema simile la terrò di sicuro in considerazione ;)
 
Ciao!

 Ciao!
 
Ciao di nuovo!

> sottostante (un po' come poi fa gsl, senza andare a cercare robe mistiche).
 
Ho aggiunto la funzione "data" per accedere direttamente
all'implementazione, e sono riuscito a usarla per passare i dati a Eigen
per puntatore.


 
 
Ben fatto, questa è di sicuro la notizia migliore! :)
 
Ciao!

 
 
Qualcosa lo posso fare pure subito, dai:
 
il codice originale è:
 
double c2(double x) {
    if (x>10e-7)
        return 1-cos(sqrt(x))/x;
    else if(x<-10e-7)
        return 1-cosh(sqrt(-x)))/x;
    else
        return (double)1/2;
}
 
che, in C è, oserei dire, più che banale.
 
Ora, visto che vogliamo usare la tua libreria, i valori d'entrata e uscita
devono essere con le unità di misura..
 
x (che sarebbe \psi, su carta) è definita come \chi^2/a.
a sono metri, \chi è... vediamo..
non lo so, però conosco la sua derivata sul tempo:
d(\chi), meglio dire d(\chi)/d(t), è sqrt(\mu)/r, ovvero sqrt(m^(-1/2))/m..
in realtà non è importante, visto che, integrando (se voglio sapere le
dimensioni), ho ben tre soluzioni..
Quindi... che dimensioni dovrò mai dare a x della mia funzione??
Io, sinceramente, su due piedi non lo so, dovrei fare un bel po' di calcoli.
 
Il fatto è, a stringere, che il calcolo dimensionale è parallelo al calcolo
numerico, ed è utile solo a controllare i risultati (una specie di prova del
nove, se preferisci) - per tutta la roba in mezzo è solo fastidio.
 
So che il tuo target è il mondo CADdistico ma, a quel punto, la regola di
segnare le variabili con l'unità di misura (_m, _cm, _km, _mm) perché dovrebbe
essere meno seguita della regola di non fare cast su un tipo diverso? Cosa
spingerebbe mai un ingegnere che perde un giorno a far calcoli su carta a
doversi pure accollare il calcolo dimensionale solo per scrivere un test per
vedere se la sua idea funziona?
 
Ancora una volta, non sto cercando di sminuire il tuo lavoro, voglio solo
portarti il mio pensiero sperando ti sia utile. Tanto poi qui lo sapete tutti
che sono solo un gran rompico****ni! :)
 
Ciao!

 vedere se la sua idea funziona?
 
Mi sa che non ci capiamo. Come ho detto, la libreria risulta utile nei 
casi in cui non si deve "calcolare" la grandezza fisica, ma questa 
risulta intuitiva.
E non ci sono test da scrivere. Si tratta solo di modificare le 
dichiarazioni delle variabili e delle costanti usate dal proprio algoritmo.


 
 
Hai ragione, naturalmente; ho portato quell'esempio solo perché stavo pensando
ad un possibile caso d'uso: uno che fa due conti su un problema e vuole
provare a vedere come gli viene un risultato.
 
Ciao!

 provare a vedere come gli viene un risultato.
 
Per tale compito, non credo che farebbe bene a usare il C++ in primo 
luogo, bensi' un ambiente interattivo, come Mathematica!


 
 
Qui devo fare un mea culpa, m'hai scoperto! Di solito scrivo direttamente
sul codice di produzione: se funziona ristrutturo, commento e faccio commit,
altrimenti faccio reset sul repository locale.
( Sì, fanno praticamente tutti così ;) )
 
Ciao!

 errori non sfugge.
 
Ti sarei grato se mi facessi capire con un esempio che cosa intendi proporre.
 
--
Carlo Milanesi