Page 1 sur 2
librairie mathématique
Publié : mar. 17/févr./2009 9:45
par sospel
Bonjour à tous !
pour programmer une application où il y a beaucoup de formules mathématiques qui manquent dans Pbasic, je cherche une librairie mathématique compatible avec PBASIC 4.3, mais je ne trouve pas
J'avais vu la librairie APM, mais elle n'est pas compatible .
Est-ce que l'un d'entre-vous connaît une telle librairie, ou un lien ?
merci d'avance pour vos réponses

Publié : mar. 17/févr./2009 9:57
par Progi1984
Que cherches tu exactement dans cette librairie mathématique comme fonctions ?
Publié : mer. 18/févr./2009 16:54
par sospel
Hello !
Merci pour vos réponses :
Progi1984 : je souhaite surtout avoir des fonctions de calcul scientifique qui ne "perdent" pas les décimales en route et qui me donnent un résultat correct - à ~ 10-6 près par rapport à un calcul de référence (en FORTRAN par exemple) - ce qui n'est pas le cas actuellement.
(voir mon post :
http://www.purebasic.fr/english/viewtop ... highlight= )
Bref, quelque chose du genre de la librairie APM, où l'on pouvait apparemment fixer la précision et très complète en trigonométrie.
Dobro :
Merci pour le lien sur ton site ! je vais exploiter tes fonctions et je t'informerai des résultats.
Publié : mer. 18/févr./2009 17:50
par Backup
sospel a écrit :
Dobro :
Merci pour le lien sur ton site ! je vais exploiter tes fonctions et je t'informerai des résultats.
Ce ne sont pas mes fonctions
mon forum est juste un stockage de certains code qui ont trainé ici

Publié : mer. 18/févr./2009 18:32
par SULREN
Bonjour,
J'ai lu ceci ci-dessus:
je souhaite surtout avoir des fonctions de calcul scientifique qui ne "perdent" pas les décimales en route et qui me donnent un résultat correct - à ~ 10-6 près par rapport à un calcul de référence (en FORTRAN par exemple) - ce qui n'est pas le cas actuellement.
Je fais beaucoup de calculs précis en PB, en définissant les variables en double précision, et j'obtiens des résultats avec des précisions au moins aussi bonnes que 10-14
par rapport à la référence que j'utilise.
Je n'ai peut être pas compris le problème qui a été posé, mis je ne vois pas PB perdre les décimales, surtout pas autour de 10-6.
J'avais besoin d'une très grande précision et le problème que j'ai rencontré était de trouver une référence pour vérifier PB.
- Aucune calculette ne le permet.
- Le calcul à la main le permet, mais il est surtout applicable aux quatre opérations de base. Pour les fonctions trigonométriques il faut se fier aux valeurs rondes, comme Sin (Pi/4) par exemple.
- J'ai finalement pris Excel de MicroSoft comme base de référence et il colle parfaitement avec les résultats de PB jusqu'à la 14e décimale au moins.
Fortran est-il si précis? Travaille t il en double précision sur 32 bits?
En tous cas la conclusion de ces discussions m'intéresse beaucoup étant donnée l'extrême précision dont j'ai besoin.
Merci.
Publié : mer. 18/févr./2009 21:15
par Ollivier
Au passage, si tu veux de la précision "surréaliste" (centaines de décimales), c'est possible. Après, c'est la vitesse de calcul qui donne les limites.
>> Forum anglais >> Search >> "Huge"
Publié : mer. 18/févr./2009 23:01
par SULREN
Bonsoir,
J'ai envisagé à un moment de faire du changement de base pour améliorer la précision, mais cela aurait en effet ralenti les calculs. C'était en fin 2006 et il me semble qu'à l'époque la double précision n'était pas disponible en PB.
Je calculais des trains de rouages pour des horloges astronomiques et avec la précision disponible je ne trouvais pas à coup sûr la meilleure solution.
Ensuite j'ai pu utiliser la double précision et elle s'est révélée tout à fait suffisante pour mes calculs. Il s'agit de calculs itératifs qui peuvent durer dans certains cas jusqu'à 2 ou 3 heures. J'ai optimisé au mieux la programmation au niveau des instructions qui sont situées au coeur des boucles d'itération.
De plus, je fais un premier passage en travaillant en simple précision et ensuite j'affine la recherche de la meilleure solution en reprenant les choses en double précision.
Je n'ai pas fait de mesures pour connaître l'écart de temps entre un gros calcul conduit en simple et en double précision.
S'il y eu des fils de discussion sur le sujet je suis preneur de les connaître. J'irai voir aussi du côté Anglais.
Merci.
Publié : ven. 20/févr./2009 9:54
par sospel
merci à
SULREN99 pour ses remarques.
Ceci dit, comme indiqué dans le lien de mon second reply dans ce post, j'avais déjà soulevé le problème de l'exactitude des calculs avec des fonctions mathématiques imbriquées - comme celà se produit de nombreuses fois dans le calcul d'éphémérides astronomiques - et quelques correspondants ont proposé des solutions, malheureusement insatisfaisantes (voir le post).
Qui plus est, je ne vois pas pourquoi Pure Basic ferait moins bien que l'ex-GFA Basic ou que Power Basic, qui calculent aussi bien ces multiples boucles que le même test en FORTRAN 95 ( qui utilise du 64 bits en DOUBLE PRECISION )
Je ne suis pas un maniaque de calculs répétés 10 millions de fois, mais ce benchmark - pris dans SKY & TELESCOPE - est impitoyable pour les troncatures de décimales (ce que de manière imagée j'ai appelé la "perte" de décimales).
Ne voyant aucune réaction de la part du team de PureBasic, je cherche donc une librairie - j'ai une ou deux pistes sur le forum anglais - et, à tout hasard, je relance ma demande de perfectionner les fonctions mathématiques actuelles ... et d'en ajouter d'autres. Mais le team n'a pas l'air très réactif. Est-ce donc si fastidieux pour un familier de la conception de langages de récupérer une librairie gratuite de fonctions mathématiques en C++ et de l'inclure dans une DLL appellable par un INCLUDE ? moi, personnellement, je ne sais pas faire

A suivre ...
Cordialement

Sospel
Publié : ven. 20/févr./2009 11:19
par djes
Ces questions trouvent souvent leur réponse sur le forum anglais.
Regarde là :
http://www.purebasic.fr/english/viewtop ... sc&start=0
http://www.purebasic.fr/english/viewtopic.php?t=22635
http://www.purebasic.fr/english/viewtop ... th&start=0
Tu peux aussi nous fournir les codes qui ne te satisfont pas, et en général on se débrouille assez bien pour améliorer les choses

Publié : ven. 20/févr./2009 11:40
par SULREN
Bonjour SOSPEL,
Cette fois ci je suis allé voir le fil de discussion que vous aviez ouvert côté anglais.
Il subsiste donc semble-t-il des problèmes à régler dans PureBasic, qui le sont peut être en V 4.3 ou le seront j’espère dans les futures versions.
Les calculs scientifiques n’étaient peut être pas la vocation d’origine de PureBasic mais j’aimerais bien, sous peine de ne plus pouvoir l’utiliser, qu’il fasse des calculs en 64 bits aussi précis qu’avec les autres langages.
Se posent le problème de la vérification de la précision des calculs et aussi le problème de la vitesse de leur exécution, dans le cas des calculs itératifs.
Trouver des benchmarks est assez facile, comme celui que vous avez donné de Sky & Telescope et on peut s’en créer soi-même sans difficultés.
C’est plus difficile de trouver des langages de référence, qui soient indiscutables, afin de comparer les résultats…. et qui soient aussi à des prix abordables, …..et qui tournent dans un environnement convivial, comme c’est le cas pour PB. Je n’ai pas pu trouver par exemple Fortran 95 sur PC.
La suite de vos investigations sur ces problèmes m’intéresse car j’ai l’intention de faire tourner les « Astronomical Algorithms » de Jean Meeus pour le design d’une horloge astronomique et je préfère maîtriser la précision des calculs et décider moi-même jusqu’où la pousser, en fonction des besoins.
Cordialement.
Publié : ven. 20/févr./2009 15:15
par sospel
Réponse à
SULREN99 :
> Il subsiste donc semble-t-il des problèmes à régler dans PureBasic, qui le sont peut être en V 4.3 ou le seront j’espère dans les futures versions.
J'utilise la V4.3. Quant à la prise en compte de nos desiderata, mon 1er post date de Septembre 2008 ...
> Je n’ai pas pu trouver par exemple Fortran 95 sur PC.
allez voir ici :
http://www.silverfrost.com/
Vous serez comblé : c'est gratuit et vous avez même des REAL LONG DOUBLE sur 10 bytes

)
>j’ai l’intention de faire tourner les « Astronomical Algorithms » de Jean Meeus
C'est l'un de mes livres de chevet préférés !! A ce sujet, j'ai programmé entièrement les éphémérides du système solaire (à partir du DANJON ) en GFA et les résultats me donnaient les positions des planètes
à moins d'une minute d'arc par rapport aux Ephémérides du Bureau des Longitudes. Je pense que le post de Road Runner en PowerBasic :
----------------------------------------------------------
DEFDBL a-z 'you want to test DOUBLES so set default variable type to that
FUNCTION PBMAIN () AS LONG
value = 1.0
FOR i=1 TO 10
FOR j=1 TO 1000
FOR k=1 TO 1000
value = TAN(ATN(10^LOG10(SQR(value*value)))) + 1.0
NEXT k
NEXT j
NEXT i
PRINT value
END FUNCTION
===> PowerBASIC answer = 10000001.0010595 " )
----------------------------------------------------------
que ce post, donc, suggère que les résultats seraient aussi bons qu'en GFA, lequel est d'ailleurs toujours disponible à cette adresse :
http://gfabasic32.googlepages.com/
Mais une bonne partie de la doc est en allemand et il manque un support, un forum, etc ...
En conclusion, au risque de me répéter, je ne vois pas pourquoi PureBasic, qui a d'énormes avantages, ne ferait pas aussi bien ! Mais apparemment, ce n'est pas une priorité ...
Cordialement
Sospel
Publié : ven. 20/févr./2009 15:41
par Backup
j'ai traduit ta procedure en purebasic
DEFDBL a-z 'you want to test DOUBLES so set default variable type to that
FUNCTION PBMAIN () AS LONG
value = 1.0
FOR i=1 TO 10
FOR j=1 TO 1000
FOR k=1 TO 1000
value = TAN(ATN(10^LOG10(SQR(value*value)))) + 1.0
NEXT k
NEXT j
NEXT i
PRINT value
END FUNCTION
===> PowerBASIC answer = 10000001.0010595 " )
sauf erreur ça donnerai ça :
Code : Tout sélectionner
Procedure.d PBMAIN ()
Value.d = 1.0
For i=1 To 10
For j=1 To 1000
For k=1 To 1000
Value.d = Tan(ATan(Pow(10,Log10(Sqr(Pow(Value.d,2)))))) + 1.0
Next k
Next j
Next i
ProcedureReturn Value
EndProcedure
Debug StrD (PBMAIN ())
ce qui m'affiche
1708221.5000000533

Publié : ven. 20/févr./2009 15:55
par Cls
En forçant le retour des fonctions en DOUBLE, le résultat semble "un peu meilleur" (toujours sauf erreur dans le code) :
Code : Tout sélectionner
Procedure.d PBMAIN()
Value.d = 1.0
For i = 1 To 10
For j = 1 To 1000
For k = 1 To 1000
sqr.d = Sqr(Value * Value)
log10.d = Log10(sqr)
pow.d = Pow(10, log10)
atan.d = ATan(pow)
tan.d = Tan(atan)
Value = tan + 1.0
Next
Next
Next
ProcedureReturn Value
EndProcedure
Debug StrD(PBMAIN())
Retour :
9999818.4040938206
Publié : ven. 20/févr./2009 15:57
par Backup
ha oui ! bien vue !!

Publié : ven. 20/févr./2009 18:31
par SULREN
Réponse à Sospel,
Je viens de télécharger Fortran95. On le trouve aujourd'hui immédiatement alors qu'en 2006 je n'ai pas réussi.
Cela me rappellera mes débuts en programmation. Je faisais du Fortran (4??) à l'école d'ingénieurs en 1966 ou 67, pour des calculs scientifiques du genre extraction des racines réelles et complexes d'un polynôme du 20eme degré.
Sauf problèmes de précision je resterai cependant fidèle à PureBasic qui m'a permis de réaliser de belles applications. C'est maintenant devenu un excellent compagnon et il est polyvalent. De plus j'espère que ses problèmes de précision s'amélioreront. Il n'a pas été créé d'emblée pour le calcul scientifique comme Fortran et c'est normal qu'il soit un peu à la traîne dans ce domaine.
PS: J'aurais peut-être besoin de votre aide pour l'utilisation des algos de J. Meeus. Je suis sur Webastro sous le pseudo SULREN (sans le 99 que j'ai du utiliser ici car Sulren tout court était déjà pris). Si vous y êtes aussi et si cela ne vous dérange pas indiquez moi votre pseudo en PM SVP, pour le cas où, à moins que vous soyez toujours joignable sur le forum PureBasic.
Merci.