Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Non capisco come funziona il metodo ulp

    codice:
    import static java.lang.Math.*;
    
    class Esempio {
    	public static void main(String args[]) {
    		double x;
    		x = ulp(12.50);
    		System.out.println(x);
    	}
    
    }
    1.7763568394002505E-15

    sul manuale c'è scritto che 1.7763568394002505E-15 è l'unità nell'ultima posizione... ma che roba è!?!?!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Non capisco come funziona il metodo ulp

    Originariamente inviato da peruzzo
    codice:
    import static java.lang.Math.*;
    
    class Esempio {
    	public static void main(String args[]) {
    		double x;
    		x = ulp(12.50);
    		System.out.println(x);
    	}
    
    }
    1.7763568394002505E-15

    sul manuale c'è scritto che 1.7763568394002505E-15 è l'unità nell'ultima posizione... ma che roba è!?!?!
    Ancora, c'è la documentazione oracle che mi pare piuttosto chiara:


    Returns the size of an ulp of the argument. An ulp of a double value is the positive distance between this floating-point value and the double value next larger in magnitude. Note that for non-NaN x, ulp(-x) == ulp(x).


    Cosa non capisci di preciso?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    anche in questo caso si parla di distanza tra un valore e quello successivo ma cosa significa?

    codice:
    import static java.lang.Math.*;
    
    class Esempio {
    	public static void main(String args[]) {
    		double x,y;
    		x = ulp(12.5);
    		y = nextAfter(12.5,13);
    		System.out.println(x);
    		System.out.println(y);
    	}
    
    }
    1.7763568394002505E-15
    12.500000000000002

    significa che quando java fa una divisione tale operazione algebrica si ferma quando si raggiunge un valore inferiore a 1.7763568394002505E-15 e che quindi per "valore sucessivo" si intende "limite di resto di una divisione"? C'é scritto questo nella documentazione oracle, ho indovinato?

  4. #4
    Non puoi studiare questo genere di argomenti senza sapere cos'è e come viene rappresentato un numero in virgola mobile (questo vale anche per la discussione su nextAfter).
    http://en.wikipedia.org/wiki/Floating_point
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Quella pagina è in inglese e ho bisogno di una spiegazione molto riassuntiva.

    A presto

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da peruzzo
    Quella pagina è in inglese e ho bisogno di una spiegazione molto riassuntiva.
    http://IT.wikipedia.org/wiki/Floating_point va meglio?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Originariamente inviato da peruzzo
    Quella pagina è in inglese e ho bisogno di una spiegazione molto riassuntiva.
    Praticamente tutte le risorse di qualità su argomenti di informatica sono in inglese, e ci sono argomenti che non si capiscono con una spiegazione riassuntiva; in ogni caso, bastano i primi paragrafi di quella pagina.

    La pagina di Wikipedia italiana linkata da Alex87 sicuramente può essere un'introduzione, ma è veramente molto scarna, per cui consiglio di approfondire un po' di più con altre risorse.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    [OT]Il metodo di studio che usi, peruzzo, non mi convince proprio.

    Stai leggendo un libro, pagina dopo pagina, chiedendoti cose che si basano su semplici concetti che dovresti avere già acquisito (a parte il fatto che l'inglese è *preliminare* rispetto a questo tipo di studi) e ti blocchi ad ogni piè sospinto.

    E quando ti "incastri" in un semplice concetto, chiedi al forum che altro non può fare che rimandarti alla semplice documentazione reperibile su Internet, che comunque non sai ben apprezzare (sempre per la mancanza di basi).

    Probabilmente, prima di prendere di petto il librone da mille pagine con il linguaggio, è necessaria un formazione più di "base" di tipo informatico.

    Secondo me.[/OT]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Ho letto qui:

    http://it.wikipedia.org/wiki/Floating_point
    http://www.okpedia.it/conversione_decimale_binario
    http://docs.python.it/html/tut/node15.html

    è ho dedotto questo:

    Con un sistema a virgola mobile binario un numero X viene rappresentato nella forma approssimata M*b^E dove (M = 0 . m1 m2 ... mi ... mt). La precisione in un sistema binario a virgola mobile vale quindi 2^(1-t) così esiste una distanza tra i numeri funzione dell'errore e del valore X quantificata da java con ulp(). nextAfter() invece fornisce il valore successivo in una direzione scelta che non è una grandezza nulla ma diversa da zero e tanto più piccola quanto più alta è la precisione della mantissa ovvero tanto più grande è il numero t.

    Esempio:

    codice:
    import static java.lang.Math.*;
    
    class Esempio {
    	public static void main(String args[]) {
    		double x,y;
    		double b = 9999999999D;
    		double c;
    		x = ulp(b);
    		y = nextAfter(b,b+1);
    		c = b+ulp(b);
    		System.out.println(x);
    		System.out.println(y);
    		System.out.println(c);
    	}
    
    }


    Output:

    1.9073486328125E-6
    9.999999999000002E9
    9.999999999000002E9
    Se è giusto (chiedo comunque conferma ) potevate scrivermelo voi senza burlarvi della mia ignoranza... e senza fornirmi pagine in inglese che sapete che odio come la peste... be non esageriamo... la peste la odio di più ma subito dopo viene l'inglese



    Dimenticavo... grazie per sopportarmi

  10. #10
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Certo che la differenza tra float e double è notevole:

    codice:
    import static java.lang.Math.*;
    
    class Esempio {
    	public static void main(String args[]) {
    		double x,y;
    		double b = 999999999999D;
    		double c;
    		x = ulp(b);
    		y = nextAfter(b,b+1);
    		c = b+ulp(b);
    		System.out.println(x);
    		System.out.println(y);
    		System.out.println(c);
    		float xf,yf;
    		float bf = 999999999999F;
    		float cf;
    		xf = ulp(bf);
    		yf = nextAfter(bf,bf+1);
    		cf = bf+ulp(bf);
    		System.out.println(xf);
    		System.out.println(yf);
    		System.out.println(cf);
    	}
    
    }
    1.220703125E-4
    9.999999999990001E11
    9.999999999990001E11
    65536.0
    1.0E12
    1.00000006E12


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.