more efficient
fix bug under big number