2017-09-28 5 views
0

J'ai fait un simple morceau de code pour tester un nombre pour voir s'il s'agit d'un nombre premier ou non mais en le nourrissant de grands nombres premiers pour tester la vitesse de le programme sur l'arduino il ne prendrait qu'un nombre à longueur 9-/sous-chiffres j'ai testé ma fonction de lecture et il renvoie le nombre entier mais le 'BigNumber' ne l'analysera pas 0BigNumber.h Arduino comment analyser un nombre plus grand que 10 chiffres

void Speed(String num) 
{ 
    Serial.println("NUM="+num); 
    BigNumber NUM = num.c_str();//this is where it fails 
    BigNumber Curr = "1";//start 2/'curr++' start of loop 
    num = ""; 
    ... the testing of prime numbers here 

le code arrête le arduino si je mets un numéro à 10 chiffres dans la sortie alors

<|S 1234567891 
>|NUM=1234567891 

et si je mets un certain nombre de 9 chiffres il sort comme prévu

<S 123456789 
>|NUM=123456789 
>|123456789 is not a prime number 
>|because ist a factor of 3 

i tryed voir si quelqu'un a eu le même problème que moi, mais je ne peux pas le trouver nulle part.

im utiliser un arduino-uno

EDIT: après avoir fait un peu plus à l'essai il ne marche pas maintenant définir le nombre insted de se briser après avoir testé 'S 1111111111' (10 chiffres) sa sortie est normal:

<|S 1111111111 
>|NUM=1111111111 
>|1111111111 is not a prime number 
>|because ist a factor of 11 

mais si je mets 11 chiffres, il analyse comme 0 ??

<|S 11111111111 
>|NUM=11111111111 
>|0 cant be a prime number because it doesn't end in 1,3,7,9 

bie: j'ai oublié de mentionner que « S number_here » S specifys la mothod de trouver le résultat que j'ai aussi D = DataCrunch il vérifie tous les numéros et L = witch Liste crée une liste des nombres premiers trouvés comme une recherche de nombre premier, et que le travail fonctionne bien, sauf que DataCrunch (D) a le même problème avec l'analyse du nombre donné.

EDIT2: c'est la preuve que BigNumber peut contenir un si grand nombre https://forum.arduino.cc/index.php?topic=85692.0 dans le premier post.

+0

Vous devriez probablement nous montrer comment vous testez les nombres premiers. Ce pourrait être quelque chose avec les types là-bas. De plus, il est possible que vous n'attendiez pas assez. Les nombres premiers deviennent de plus en plus rares au fur et à mesure que l'on avance, donc le temps de trouver le prochain premier est exponentiellement plus grand que le précédent. –

+0

non j'ai testé le code en lui envoyant un int non signé comme le nombre pour tester aucun problème et il fonctionne avec tous les numéros de taille sous 10 chiffres il se bloque seulement lorsque j'essaye d'analyser un numéro à 10 chiffres BigNumber –

+0

BigNumber'? Juste une supposition, mais je suppose que vous frappez un débordement d'entiers de 32 bits (je testerais 2^32-1 = 4294967295 et 2^32 = 4294967296 pour vérifier). – MuertoExcobito

Répondre

0

alors qu'il s'avère après quelques recherches extensives que BigNumber n'est pas adapté pour les très grands nombres, mais une autre partie de la 'BigNumber.h' lib fait son bc_num.

bc_num x; 
bc_str2num(&x, "9898989898", 10); 
String c = "Controll="; 
c+=bc_num2str(x); 
Serial.println(c); 

sortie

Controll=9898989898 

mais comme vous pouvez le voir cela prend un peu plus la programmation pour implamented et si im va partir et commencer maintenant au revoir.