for循环中的除数值正在神秘地更改(?)

时间:2019-03-14 02:06:38

标签: java for-loop integer-division

所以我已经待了几个小时了,老实说我完全陷入了困境。我编写了一个for循环,用于计算整数中的数量,但是我发现,一旦输入10位数以上的数字,除数的值就会改变,而且我不知道为什么。我搜索互联网无济于事,因此如果您有任何帮助或提示,我将不胜感激。谢谢!

def forward(self, batch, method='last_step'):
    embeds = self.word_embeddings(batch)
    x = torch.transpose(embeds, 0, 1)
    x, self.hidden = self.gru(x, self.hidden)

    if method == 'last_step':
        x = x[-1]
    elif method == 'average_pooling':
        x = torch.sum(x, dim=0) / len(batch[0])
    elif method == 'max_pooling':
        x, _ = torch.max(x, dim=0)
    else:
        raise Exception('Unknown method.')
    # A series of Linear layers with ReLU and Dropout
    for l in self.linears:
        x = l(x)
    log_probs = F.log_softmax(x, dim=1)
    return log_probs

3 个答案:

答案 0 :(得分:1)

int不能容纳大于2,147,483,647的数字。您需要坚持使用long来处理更大的数字。

答案 1 :(得分:1)

整数最多只能容纳2 ^ 32-1。此外,为什么将输入参数强制转换为整数?

另一件事是,由于从0一直循环到creditCardNumber中的for(int i = 0; i <= creditCardNumber; i++){ ... },因此您要计算导致除数的每个数字的位数。因此,例如10000会返回1中的位数,2中的位数一直到10000。

最后,整个功能可以通过

一行完成
return Long.toString(creditCardNumber).length();

return creditCardNumber.toString().length();

如果将creditCardNumber更改为Long而不是long,但是您必须使用结尾处的后缀l来调用它。

如果您想要更短的东西,可以做

return (creditCardNumber+"").length();

答案 2 :(得分:0)

当数字大于10位时,由于整数不能容纳大于2 ^ 31-1或2,147,483,647(即只有10位数字的数字)的值,因此无法完成对整数的转换。我建议坚持使用long