2017-09-28 33 views
0

私はそれが素数かどうかを調べるために単純なビットコードを作りましたが、大きな素数を与えて速度をテストしましたarduinoのプログラムでは、長さ9〜/桁以下の数字しか取れません。私の読み込み機能をテストして、数字全体を返しますが、「BigNumber」はそれを構文解析しません。BigNumber.h Arduinoどのように10桁以上の数値を解析するか

code:

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 

コードは、私が10桁の数字を入れた場合、出力はそう

あるのArduinoを停止
<|S 1234567891 
>|NUM=1234567891 

と私は期待どおりに出力9桁

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

で番号を置けば誰も私と同じ問題があった場合、私は見しようと試みてきたが、私はどこにでもそれを見つける傾けます。

イムは、arduinoの-UNO

EDITを使用します。いくつかは、より多くのテストを行った後に、それは今、数は 'S 1111111111'(10桁)をテストした後クラッシュのinstedセットdoesntのその出力は正常です:

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

しかし、11桁の数字を入力すると、0として解析されます。

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

BTY:私はS iはまた、Dは= DataCrunch、それはすべての数字とLをチェックする必要があり、結果を見つけることの優先mothodをspecifys「Sがnumber_here」ことを言及するのを忘れてしまった=リストの魔女のような見つかった素数のリストを作成し、素数検索、そして、DataCrunch(D)が与えられた数を解析するのと同じ問題を抱えています。

EDIT2: このなBigNumberは最初のポストに、このような多数 https://forum.arduino.cc/index.php?topic=85692.0を保持することができるという証拠があります。

+0

おそらく、素数をどのようにテストするかを私たちに見せてください。そこには種類があるかもしれません。また、十分待っていない可能性もあります。素数は、あなたがさらに進むにつれて、より希薄で希少になります。したがって、次の素数を見つける時間は、指数関数的に前回よりも大きくなります。 –

+0

いいえ問題をテストするための数値としてconst unsigned intを送信してコードをテストしました。10桁未満のすべてのサイズ番号で動作します。BigNumberに10桁の数字を解析しようとするとクラッシュするだけです –

+0

' BigNumber'?ちょうど推測ですが、32ビット整数のオーバーフローが発生していると仮定します(2^32-1 = 4294967295と2^32 = 4294967296を検証します)。 – MuertoExcobito

答えて

0

したがって、BigNumberは非常に大きい数値には適合しないが、 'BigNumber.h' libの別の部分はそのbc_numを行うという、いくつかの広範な研究の結果、

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

出力

Controll=9898989898 

いますが、これはimplamentedので、オフに行くと別れ、今開始するつもりイム取得するもう少しプログラミングを取る見ることができますように。

関連する問題