Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    [C++] Precisione macchina

    codice:
    float Precisione(){
    	float epsilon=1.0;
    	
    	while((1+epsilon)>1.0)
    		epsilon /= 2.0;
    	
    	return epsilon;
    }
    
    void main(){
    	
    	cout<<Precisione();
    }
    Questo è il codice che ha scirtto il mio prof per calcolare la precisone del computer... ma non mi convince molto...
    intanto perchè la precisione macchina è fatta in float e non in double?

  2. #2

    Re: [C++] Precisione macchina

    Originariamente inviato da Il Pazzo
    intanto perchè la precisione macchina è fatta in float e non in double?
    codice:
    #include <iostream.h>
    #include <stdlib.h>
    
    double Precisione(){
    	double epsilon=1.0;
    	while((1+epsilon)>1.0)
    		epsilon /= 2.0;
    	return epsilon; }
    
    float Precisione1(){
    	float epsilon=1.0;
    	while((1+epsilon)>1.0)
    		epsilon /= 2.0;
    	return epsilon; }
    
    void main(){
    	cout<<Precisione()<<endl<<Precisione1()<<endl<<endl;
        system("pause"); }
    Il risultato è uguale ...
    Se compili in gcc a 64 bit forse si usa il float perchè è uguale al double del gcc a 32 bit...
    (non so se l'algoritmo è corretto)
    Experience is what you get when you don’t get what you want

  3. #3
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    ah si... non l'avevo notato.. però non mi convince l'algoritmo in se stesso... se divido per 2.1 invece che per 2 la precisione aumenta invece....

  4. #4
    eh.. ma il sistema binario è fatto di 2 cifre, non di 2.1
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  5. #5
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    uhm non capisco... e quindi?

    Cioè la precisione macchina non è il numero di cifre decimali massime che si possono avere?

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Io non ho capito come funziona l'esempio
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    ma guarda... l'ha fatto il mio prof (solo che non avendo molta fiducia in lui l'ho provato)... neache per me ha molto senso... la definizione che ci ha dato è laseguente:
    La precisione macchina è il più piccolo numero che sommato ad 1 da un risultato che il calcolatore sente maggiore di 1 e poi ci ha detto che è sufficente considerare un numero e dimezzarlo ripertutamente fintantoche 1 + epsilon viene percepito maggiore di 1....


    ma io avrei fatto diversamente.. che so dimezzare un numero fino a quando il numero era sentito maggiore di 0.. ma neanche questo penso mi dia la precisione macchina... se lo divido per 2.1 risulta un numero ancora più piccolo.... e così via... boh

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il machine epsilon (quello che calcola il tuo professore) e' definito in quel modo.

    Leggi

    Machine epsilon
    http://en.wikipedia.org/wiki/Machine_epsilon

  9. #9
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    boh... però i due algoritmi mi danno risultati diversi.....

    Quello del mio prof 1.11022e-016
    Quello di Wikipedia 1.19209e-007

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In realta' il codice del tuo professore dovrebbe essere

    while((1+epsilon/2.0)>1.0)
    epsilon /= 2.0;

    altrimenti visualizza il primo epsilon non valido ...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.