2017-02-10 65 views
0

我在php中使用bcmod和gmp_mod函數來處理大量數據。PHP bcmod或gmp_mod輸入類型問題

這工作得很好:

// large number must be string 
$n = "10000000000000000000001"; 
$y = 1025; 
$c = 1025; 
// Both works the same (also tested in python) 
$y = gmp_mod((bcpowmod($y, 2, $n) + $c) , $n); 
$y = bcmod ((bcpowmod($y, 2, $n) + $c) , $n); 

但輸入$n也不是一成不變的。所以我必須用型鑄造喜歡:

$n = (string)10000000000000000000001; 

不起作用了。

GMP給出了這樣的錯誤:

gmp_mod(): Unable to convert variable to GMP - string is not an integer 

而關於BC,使我這個錯誤:

bcmod(): Division by zero 

的問題是,(string)不將其轉換爲字符串罰款。任何想法?

編輯:我找到了解決辦法here,但仍是輸入字符串:

$bigint = gmp_init("9999999999999999999"); 
$bigint_string = gmp_strval($bigint); 
var_dump($bigint_string); 

回答

1

如果你正在服用的輸入$n它會給你一個string不是int,如果你有類型鑄造爲int在任何點......照顧最大尺寸的int,上面給出的號碼將被轉換爲1.0E+22現在會發生什麼當您嘗試鍵入轉換(string)1.0E+22它變成"1.0E+22"這顯然只是一個字符串,無法轉換去gmp數。

,所以你需要科學記數法轉換爲字符串,將自動包括,因此你還需要更換那些逗號

$n = 10000000000000000000001; 
$n = str_replace(",", "", number_format($n)); 
+0

我知道原因,只是尋找一個解決方案。 –

+0

從來沒有定義$ n的類型,它將始終是一個字符串...如果從...輸入...你不能輸入類型 –

+0

查看解決方案 –