Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89

    C# funzione super ottimizzata per convertire un numero binario in decimale

    dovendo lavorare su numeri binari molto grandi devo usare variabili di tipo BigInteger, il problema e che a volte il numero decimale per essere elaborato ci mette ore...
    ecco cosa ho fatto:
    codice:
    static BigInteger Binario_Decimale(string binario)
            {
                BigInteger potenza = 0;
    
    
                for (int i = 0; i != binario.Length; i++)
                {
                    potenza = BigInteger.Parse((potenza + (BigInteger.Parse(binario.Substring(binario.Length - i - 1, 1)) * BigInteger.Pow(2, i))).ToString());
                }
                return potenza;
            }
    qualcuno conosce un metodo per fare questa conversione in modo veloce pur avendo numeri binari immensi?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Io direi che è meglio questo codice

    codice:
                BigInteger r = 0;
    
    
                foreach (char c in binario)
                {
                    r <<= 1;
                    r += c-'0';
                }
    
    
                return r;
    Ultima modifica di oregon; 02-03-2017 a 22:20
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    grazie, provo e ti faccio sapere

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    mmm... ancora troppo lento... esiste un modo alternativo per trovare il numero decimale da un numero binario? magari dividendo il numero binario in pezzi?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A partire da una stringa, questo codice mi sembra il minimo, almeno in C# ...

    Puoi usare

    r += c & 1;

    per migliorare di qualche millesimo di secondo ma nulla di più.

    Non capisco cosa intendi con "troppo lento" ma è ovvio che non puoi pretendere chissà cosa da un PC ... Forse non hai le idee chiare.
    Ultima modifica di oregon; 03-03-2017 a 22:44
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    immagina un numero binario con 21000 cifre da convertire in decimale...
    il computer è lentissimo a fare questa conversione, allora volevo sapere se c'era un metodo per poterlo fare in maniera moooolto più veloce. Ho anche provato usando i 4 processori (del mio pc) in parallelo, ma rimane molto lento.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Tanto per cominciare non dovresti usare linguaggi di questo tipo, ma direttamente Assembly.

    In secondo luogo, non puoi usare il normale hardware ma sistemi molto più performanti e sicuramente non a tua disposizione.

    In realtà, non si capisce a cosa ti serva una cosa del genere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    57
    dovresti determinare con dati concreti cosa intendi con troppo lento,
    poichè con 50000 cifre ci impiega in media 1.5 ms

    comunque se leggi da stream (presumo) puoi fornire direttamente l'array di byte

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.