Sto provando a scrivere un codice per determinare quando il numero di millisecondi dall'inizio del 1970 supererà la capacità di un lungo. Il seguente codice sembra fare il lavoro:Perché scrivere un numero in notazione scientifica fa la differenza in questo codice?
public class Y2K {
public static void main(String[] args) {
int year = 1970;
long cumSeconds = 0;
while (cumSeconds < Long.MAX_VALUE) {
// 31557600000 is the number of milliseconds in a year
cumSeconds += 3.15576E+10;
year++;
}
System.out.println(year);
}
}
Questo codice viene eseguito in pochi secondi e stampe 292272992. Se invece di usare la notazione scientifica scrivo cumSeconds come 31558000000L
, il programma sembra prendere “per sempre” a correre (ho appena colpisci la pausa dopo 10 minuti circa). Si noti inoltre che scrivere cumSeconds in notazione scientifica non richiede di specificare che il numero è long
con L o l alla fine.
31557600000 è il numero di millisecondi in un anno medio nel calendario * Julian *. Per il calendario gregoriano, è 31556952000. – dan04
Va bene, lo dirò. Questo non è un buon nome variabile. – isanae
Nel caso in cui fare questo senza un loop ti interessa; è possibile utilizzare la divisione: 'System.out.println (1970 + (long) Math.ceil (Long.MAX_VALUE/31557600000L));' – Paulpro