Préambule :
J’utilise PB depuis 2005, à ma grande satisfaction mais toujours pour du calcul scientifique (plutôt tordu) avec très peu d’imagerie. Je n’utilise donc qu’une infime, vraiment infime, partie du jeu d'instructions de PB.
Mais j’ai besoin de vitesse d’exécution parce que je fais essentiellement des calculs itératifs et j’ai presque toujours besoin d’une très grande précision sur les variables.
Je ne suis donc pas débutant en « terme d’ancienneté », mais débutant en « matière de programmation ».
Je suis en Windows 10, sur un PC assez puissant et avec disque SSD.
Le problème qui me fait demander votre aide et le suivant :
Pour un travail en cours actuellement, je dois saisir au clavier des nombres entiers qui peuvent être très grands, en restant toutefois dans les limites :
-9223372036854775808 à + 9223372036854775807
Quelquefois la valeur prise en compte par le programme n’est pas celle que j’ai saisie.
Exemple si je saisis 17 fois 1 : 11111111111111111
le programme travaille sur : 11111111111111112
et cela casse tout mon travail.
J’aimerais savoir à quel endroit je me plante dans les déclarations. Merci d’avance de votre aide.
Pour illustrer mon problème j’ai écrit un bout de code (V 5-40), en syntaxe infantile, sans subtilités, afin de ne pas brouiller les pistes, et avec des tas de commentaires.
Tant qu’on saisit moins de 17 chiffres il n’y a pas de problème, c’est au-delà que cela part en vrille.
Code : Tout sélectionner
;PROGRAMME DE TEST DE SAISIE EN QUAD DE NOMBRE TAPE AU CLAVIER
;*************************************************************
OpenConsole()
;Déclaration variable au format Quad
NOMBRE.q=0
QUOTIENT.d=0
;Saisie du nombre
Print("TAPER LE NOMBRE A SAISIR : ")
NOMBRE$=Input()
NOMBRE=Val(NOMBRE$) ;Ai pris Val() et pas ValD() ou ValF(), afin de saisir au format Quad
PrintN(" ")
;Print du nombre saisi au format Quad, puis Float
Affich1$=Str(NOMBRE) ;Pris Str() pour convertir un format Quad
PrintN("AFFICHAGE DE LA SAISIE en Quad: "+Affich1$)
Affich2$=StrD(NOMBRE,10)
PrintN("AFFICHAGE DE LA SAISIE en Float: "+Affich2$)
PrintN(" ")
;Division nombre par 2 et Print
QUOTIENT=NOMBRE/2
Affich3$=StrD(QUOTIENT)
PrintN("Resultat division NOMBRE par 2= "+Affich3$)
PrintN(" ")
;Quitter progrmamme
Repeat
PrintN("Pressez q ou Q pour quitter")
Rep2$=Input():PrintN(" ")
Until Rep2$="q" Or Rep2$="Q"
Inkey()
CloseConsole()
End