Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-07-2008, 17:08   #1
Antares88
Senior Member
 
L'Avatar di Antares88
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 832
[JAVA] problema massimo valore int

Mi trovo alle prese con uno stupidissimo esercizio, e il risultato non mi torna probabilmente per un errore altrettanto sciocco.

Devo calcolare il massimo valore degli int.

Ho tentato due strade:

La prima è un ciclo while che incrementa una variabile int di uno finché essa è maggiore o uguale a zero. Poiché con l'ultimo incremento la variabile prende valore negativo vista la circolarità del dominio del tipo int, il programma sottrae 1 prima di stamparla. QUesto sistema mi da il risultato giusto, ossia 2147483647.

La seconda strada è semplicemente calcolare (2^31)-1 utilizzando il metodo pow della classe Math.
Quest'ultimo sistema mi da un risultato sbagliato: 2147483646.
Ecco il codice:

Codice:
class MaxInt
{
	public static void main(String[] args)
	{
		int max = 0;

		while(max>=0)
			max++;
		System.out.println(max-1);
		System.out.println((int)Math.pow(2, 31) -1);
	}
}
Ho la sensazione che sia qualcosa di relativo alla conversione esplicita, forse dipende dalla precedenza degli operatori ?
__________________
Trattative concluse su mercatino: The_Saint, ewandeep, Wiltord, maurizioi, Compulsion, mauryxxx76
Antares88 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2008, 18:18   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Hai provato a fare il cast solo dopo aver sottratto 1?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2008, 23:46   #3
Antares88
Senior Member
 
L'Avatar di Antares88
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 832
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Hai provato a fare il cast solo dopo aver sottratto 1?
facendo come dici tu funziona ma non ho capito perché. è questione di precedenza ?
__________________
Trattative concluse su mercatino: The_Saint, ewandeep, Wiltord, maurizioi, Compulsion, mauryxxx76
Antares88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 09:28   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Il cast a (int) tronca la parte decimale del numero che si sta castando, inoltre l'operazione di cast ha una precedenza maggiore della sottrazione percui nel codice che hai postato ti fa:
1) Math.pow(2, 31)
2) il risultato lo casta a (int)
3) infine sottrae 1

Il fatto è che al punto 1) gli interi letterali che passi in input a pow vengono prima implicitamente convertiti a double dato che nella classe Math esiste solo un metodo pow così definito:
Codice:
public double pow(double a, double b)
{
    //...
}
Quindi ti viene restitutito un double, che viene a sua volta castato a int, troncando quindi la parte decimale.
Poi sottrai il letterale 1.

Non so se è questo il motivo perchè in teoria tu usi interi e il calcolo della potenza di 2^31 dovrebbe essere preciso, quindi anche con i cast non ci dovrebbero essere problemi.

Però provando a fare questo:
Codice:
System.out.println(Math.pow(2.0, 31.0) - 1.0);
la stampa del numero viene corretta.

Mentre così:
Codice:
System.out.println((int) Math.pow(2.0, 31.0) - 1.0);
viene errata, quindi sembra proprio il casting prima della sottrazione il problema.


Cmq per sapere i valori estremi di un int in ambiente Java potresti andare a pescare le costanti Integer.MIN_VALUE e Integer.MAX_VALUE
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 13:30   #5
Antares88
Senior Member
 
L'Avatar di Antares88
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 832
infatti la cosa strana è proprio che 2^31 dovrebbe dare un valore preciso, senza parte decimale.
__________________
Trattative concluse su mercatino: The_Saint, ewandeep, Wiltord, maurizioi, Compulsion, mauryxxx76
Antares88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 19:01   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Se esiste Integer.MAX_VALUE, allora forse è meglio usare quello.

Sennò ((-1) & (~(1 << 31)))? Complemento a due rulez!
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 02-07-2008 alle 19:55.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 19:09   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Sfortunatamente non conosco Java, ma penso che il complemento ad uno lo si faccia nello stesso modo (~), no?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 20:17   #8
Antares88
Senior Member
 
L'Avatar di Antares88
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 832
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Se esiste Integer.MAX_VALUE, allora forse è meglio usare quello.

Sennò ((-1) & (~(1 << 31)))? Complemento a due rulez!
Certamente conviene usare il max integer tuttavia era un esercizio che ci è stato dato all'inizio del primissimo corso di java, in cui informazioni come questa non ci erano ancora note.
__________________
Trattative concluse su mercatino: The_Saint, ewandeep, Wiltord, maurizioi, Compulsion, mauryxxx76
Antares88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 20:28   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Capito... se esistono complementi fatti allo stesso modo, puoi usare la formula che ho scritto sopra, l'ho provata in C e mi funziona. Altrimenti puoi usare un ciclo tipo:
Codice:
int MaxInt()
{
  int risultato = 0;

  for (int bit = 0; bit < 31; ++bit)
  {
    risultato <<= 1
    risultato |= 1;
  }
  return risultato;
}
Che dovrebbe funzionare.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Torvalds: 'Non sono più un progra...
Xiaomi lavora alla nuova Smart Band 11, ...
Inabissato in Grecia, iPhone 16 Pro sopr...
Volkswagen Zukunftsplan 2030: il nuovo p...
'Non ci interessano i segreti di Apple':...
Genitori troppo connessi: uno studio riv...
Motorola conferma l'arrivo del nuovo Edg...
Smascherata la truffa dei finti SSD da 1...
Xiaomi 18 Pro: chip a 2 nm, Privacy Disp...
Il 71% degli autovelox italiani era fuor...
La Cina svela descrive la sua arma a mic...
Le 12 offerte Amazon TOP del weekend: ai...
Mini proiettore portatile a 36,99€: otti...
RTX 5070 a 599€ e RTX 5060 Ti a 357€, do...
In Cina il mega-impianto solare a sali f...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v