Превышение лимита типа long
Подскажите, может я что-нибудь не заметил. Ниже есть два фрагмента кода, по сути они выполняют одно и то же действие: находят значение сотого элемента последовательности чисел типа long. Последовательность задается следующим образом: каждый следующий элемент равен предыдущему, умноженному на 3 + 1.
Например:
a1 = 5;
a2 = a1*3+1;
a3 = a2*3+1;
long[] massive = new long[100];
massive[0] = 5;
for(int h = 1; h<100; h++)
{
massive[h] = massive[h-1]*3 + 1;
}
И значение massive[99] получается -5471808550152166316l (по идее значение превышает лимит типа long и принимает отрицательное значение, и так может продолжаться по кругу, как я понял)
long a = 5;
int f = 1;
while (f <= 100)
{
a = 3*a + 1;
f++;
}
Тут после завершения цикла значение а равняется 2031318423253052669l
Почему значения отличаются? Я что-то не заметил?
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Вот так равны
public static void main(String[] args) {
long[] massive = new long[100];
massive[0] = 5;
for (int h = 1; h < 100; h++) {
massive[h] = massive[h - 1] * 3 + 1;
}
System.out.println(massive[99]);
long a = 5;
int f = 1;
while (f < 100) {
a = 3 * a + 1;
f++;
}
System.out.println(a);
}