Page 2 of 6 FirstFirst 123456 LastLast
Results 16 to 30 of 88

Thread: Piccola mano con C

  1. #16
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    ALtra domandina veloce veloce. io ho un array di int e uno di float che però si combinano continuamente(moltiplico il valore di uno per il valore dell'altro): ogni volta devo eseguire il cast? Perchè il vettore di int lo costruisco io come vettore di numeri unitari unsigned int(perchè mi fa comodo), mentre il secondo vettore è composto da numeri molto piu alti di 65000(valore max di unsigned int) quindi per forza di cose mi serve usare o un float o addirittura un double. Oppure magari creo un vettore float ausiliario e poi trasformo quel vettore in vettore di interi...
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  2. #17
    Lieutenant Junior Grade Eltarion's Avatar
    Join Date
    Dec 2004
    Location
    Venaria
    Posts
    4.085

    Default

    scusa, non per fare l'hipster, ma non mi sembri un drago del c, che problemi di ottimizzazione ti fai????

    si le dichiari come dichiari normalmente le funzioni e le usi normalmente dal main.

    per la seconda domanda (che conferma la precedente affermazione sull'ottimizzazione)...ci sono anche i long. occhio a non castare da un tipo più grosso ad uno più piccolo o rischi di perdere informazioni.

    edit:
    tra l'altro ora che ci penso guarda che un int (unsigned) può avere come valore massimo anche 2^32. dipende dal sistema.
    Last edited by Eltarion; 12th December 2011 at 18:04.
    Realm Of Trollers
    while ( ! ( succeed = try() ) );
    Spoiler

  3. #18
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Boh elta, perchè non fare una cosa bene se si può: meglio perderci 10 minuti in piu in itinere che poi a posteriori tornare indietro e rifare tutto.
    Io dovrei gestire numeri abbastanza grossi, nell'ordine di 10^20. Il punto è che sono TUTTI interi:
    il primo vettore contiene solo interi unitari
    il secondo vettore contiene solo interi compresi tra 1 e 10^20
    Come faccio a moltiplicare il primo elemento del primo vettore con il primo elemento del secondo? (float)v1[1]*v2[1] ?
    Il fatto che il primo vettore sia di numeri unitari che ottengo dal secondo e che il secondo sia fatto da numeri inter fa si che non abbia perdita di info.
    Cmq mi manca solo qualche base di traduzione nel linguaggio, il problema di per se lo ho ben presente.
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  4. #19
    Lieutenant Junior Grade Eltarion's Avatar
    Join Date
    Dec 2004
    Location
    Venaria
    Posts
    4.085

    Default

    Quote Originally Posted by Brcondor View Post
    Boh elta, perchè non fare una cosa bene se si può: meglio perderci 10 minuti in piu in itinere che poi a posteriori tornare indietro e rifare tutto.
    Io dovrei gestire numeri abbastanza grossi, nell'ordine di 10^20. Il punto è che sono TUTTI interi:
    il primo vettore contiene solo interi unitari
    il secondo vettore contiene solo interi compresi tra 1 e 10^20
    Come faccio a moltiplicare il primo elemento del primo vettore con il primo elemento del secondo? (float)v1[1]*v2[1] ?
    Il fatto che il primo vettore sia di numeri unitari che ottengo dal secondo e che il secondo sia fatto da numeri inter fa si che non abbia perdita di info.
    Cmq mi manca solo qualche base di traduzione nel linguaggio, il problema di per se lo ho ben presente.
    hai ragione sull'ottimizzazione, ma mi sembra tu abbia dei problemi ben più grossi rispetto alla differenza di utilizzo delle risorse tra linux e windows.
    ricapitolando se l'uint non ti basta (2^32) hai anche il long (2^64). Se devi salvare il sisultato in un vettore di float allora devi castare a float.

    io comincerei ad avere un qualcosa da testare e dopodichè andrei ad ottimizzare (anche perchè così ti accorgi dove potresti avere margini di miglioramento). Tra l'altro a meno che il progetto non sia composto da altre parti di cui non hai parlato, non mi sembra ci voglia poi molto a riscrverlo anche da capo per ottimizzarlo
    Realm Of Trollers
    while ( ! ( succeed = try() ) );
    Spoiler

  5. #20
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Eltarion View Post
    yes you can ma solo ocn c++ se non erro. in c usi direttamente le api di winzozz

    @brcondor fallo su quello che ti è più comodo
    Boh mi pareva che pure in C liscio si potesse, ricorderò male

    Quote Originally Posted by Eltarion View Post
    scusa, non per fare l'hipster, ma non mi sembri un drago del c, che problemi di ottimizzazione ti fai????
    This.
    Imo brcondor hai sbagliato facoltà, dovevi fare informatica a sto punto

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  6. #21
    Lieutenant Junior Grade Eltarion's Avatar
    Join Date
    Dec 2004
    Location
    Venaria
    Posts
    4.085

    Default

    Quote Originally Posted by Axet View Post
    Boh mi pareva che pure in C liscio si potesse, ricorderò male
    la fopen fa parte di iostream che è una classe, quindi solo c++
    Ho sbagliato io a scrivere fopen prima, da su linux effettivamente è open senza la f
    Realm Of Trollers
    while ( ! ( succeed = try() ) );
    Spoiler

  7. #22
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Quote Originally Posted by Axet View Post
    Boh mi pareva che pure in C liscio si potesse, ricorderò male



    This.
    Imo brcondor hai sbagliato facoltà, dovevi fare informatica a sto punto
    Scusa, solo quelli che fan informatica sanno programmare? Con matlab ti assicuro che do le basi a moltii informatici. Sapere scrivere un algoritmo logico è una cosa che chiunque può fare, saperlo implementare spesso pure: non devo fare nulla di trascendente.
    Non è il mio lavoro ne lo sARà, è solo un progettino molto interessante: un informatico andrà molto piu a fondo su determinate questioni che a me non interessano.
    Il programma base non ottimizzato già l'ho scritto, con soli int, ma serve a poco, dato che arrivo al max a 65000, numero minuscolo. Anche long secondo me finirebbe col starmi stretto prima o poi.
    Il problema di fondo concettuale è il seguente: se ho un vettore di float, come faccio a castarlo come vettore di int? Dovrei forse crearmi un vettore int provvisorio e ogni volta copiare un elemento con cast?
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  8. #23
    Lieutenant Commander San Vegeta's Avatar
    Join Date
    Oct 2003
    Location
    Bologna
    Posts
    12.154

    Default

    Ora sono al lavoro, cmq una correzione importante te la devo fare: un int arriva a due miliardi e rotti, un unsigned int a circa il doppio.
    Su questo non si discute

    Ovviamente int 32 bit
    I rubinetti a casa di Chuck Norris non perdono, vincono.

    In the beginning there was nothing...then Chuck Norris Roundhouse kicked that nothing in the face and said "Get a job". That is the story of the universe.

    Quote Originally Posted by Wolfo View Post
    Concordo e propongo ban temporanei per chi critica la topa , la topa non si critica , dal trombabile in su non si commenta in modo sgradevole.
    la tua ignoranza in materia e' raccapricciante
    -cit. Estrema, 2022

  9. #24
    Lieutenant Junior Grade Eltarion's Avatar
    Join Date
    Dec 2004
    Location
    Venaria
    Posts
    4.085

    Default

    Quote Originally Posted by San Vegeta View Post
    Ora sono al lavoro, cmq una correzione importante te la devo fare: un int arriva a due miliardi e rotti, un unsigned int a circa il doppio.
    Su questo non si discute

    Ovviamente int 32 bit
    l'avevo già scritto due volte qq

    Y U NO LISTEN TO ME?
    Realm Of Trollers
    while ( ! ( succeed = try() ) );
    Spoiler

  10. #25
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Eltarion View Post
    la fopen fa parte di iostream che è una classe, quindi solo c++
    Ho sbagliato io a scrivere fopen prima, da su linux effettivamente è open senza la f
    Boh m'hai fatto venire il dubbio e ho controllato:
    http://www.acm.uiuc.edu/webmonkeys/book/c_guide/

    C'è

    Quote Originally Posted by Brcondor View Post
    Scusa, solo quelli che fan informatica sanno programmare? Con matlab ti assicuro che do le basi a moltii informatici. Sapere scrivere un algoritmo logico è una cosa che chiunque può fare, saperlo implementare spesso pure: non devo fare nulla di trascendente.
    Non è il mio lavoro ne lo sARà, è solo un progettino molto interessante: un informatico andrà molto piu a fondo su determinate questioni che a me non interessano.
    Tralasciando il "con matlab ti assicuro spacco i culi" che è abbastanza lol, ovviamente non solo quelli che fanno informatica sanno programmare. Anche perchè, per programmare, non serve mica una laurea (cambia magari la qualità di quello che è stato prodotto, ma non è sempre vero e cmq si ovvia con l'esperienza).
    Il fatto è che hai aperto in poco tempo 2 thread per questioni inerenti l'informatica, da cui segue la mia battuta.

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  11. #26
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Ok, sbagliavo io. CMq 2 miliardi e rotti non mi bastano... magari me li faccio bastare per ora.
    Cmq axet il punto è che durante un percorso di studi che non centra nulla con la programmazione, mi è stato chiesto per un progetto di implementare un determinato algoritmo molto particolare, che deve per forza di cose usare puntatori e usare numeri enormi. Ho implementato tutto con matlab, tutto bello tutto perfetto se non che matlab non gestisce in maniera intelligente la memoria e soprattutto non permette di implementare puntatori. Allora parlandone col prof lui mi ha detto"è qua che ti aspettavo, infatti devi farlo col c se vuoi ottenere qualcosa". Eran 4 anni che non toccavo c, e il passaggio matlab==>c è stato traumatico(con matlab ho lavorato tantissimo, per la tesina e per altri esami e lo so usare abbastanza bene). Un tempo, quando ho dato informatica 1, lo sapevo senza problemi: ora devo piano piano riscoprire tutto. Tutto questo condito da alcune specifiche fuori dall'ordinario fanno si che io mi faccia mille paranoie stupide.Con matlab il mio algoritmo si ferma con numeri nell'ordine delle decine di milioni, inizia a consumare tutta la ram. Se ri-implementando tutto in c mi fermo a 4 miliardi, sai che guadagno.
    Last edited by Brcondor; 12th December 2011 at 20:19.
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  12. #27
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Torno a dire come, se non erro, ti avevo detto anche nel 3d dei numeri primi: se ci dici COSA devi fare ti si può aiutare meglio. Ad esempio, perchè servono PER FORZA i puntatori?
    C non è l'unica alternativa, esistono C++, Java ed altri 2353906358524 linguaggi. Dipende tutto da quello che devi fare.

    Per quanto riguarda matlab, è ottimo per modellare e fare prove ma è ben lungi dall'essere efficiente. Essendo ad alto livello poi è facile da usare ed è estremamente flessibile (tutti i vari toolkit), ma in ogni caso ha dei limiti enormi. Certo spacca per il calcolo matriciale (difatti è usatissimo in Image Processing), ma le limitazioni impongono che venga usato quasi solo per stadi iniziali.. di solito si traduce il tutto in linguaggi più efficienti come appunto C.

    Tornando ai numeri grossi in C, ignoro se esista un supporto nativo anche se tbh non credo, ma potresti salvarli come un vettore di interi dove ogni cella è una cifra. In questo modo puoi crearti numeri arbitrariamente grandi, finchè c'è memoria disponibile. Altrimenti, così a naso, puoi approssimare in 240942 modi diversi ma dipende sempre da cosa devi fare: ti servono numeri esatti o vanno bene anche approssimati? Come dicevo aiutare con info così scarse è estremamente difficile.

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  13. #28
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Grazie mille cmq per le risposte.
    Io ve lo chiedo, se avete voglia di rispondermi vi sarò grato: ammettiamo che io abbia un vettore con una quantità di elementi superiore ai 2^32 citati prima. Come faccio a fare un iteratore che spazi per tutto il vettore? Se uso un int a un certo punto si impallerà tutto. Se uso un float mi da errore e mi dice che sto usando un float come posizione e per lui è sbagliato.
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  14. #29
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Brcondor View Post
    Grazie mille cmq per le risposte.
    Io ve lo chiedo, se avete voglia di rispondermi vi sarò grato: ammettiamo che io abbia un vettore con una quantità di elementi superiore ai 2^32 citati prima. Come faccio a fare un iteratore che spazi per tutto il vettore? Se uso un int a un certo punto si impallerà tutto. Se uso un float mi da errore e mi dice che sto usando un float come posizione e per lui è sbagliato.
    Se stai cercando di implementare quello che ho scritto nel reply precedente (cioè rappresentare un numero come un vettore dove ogni cifra corrisponde a una cella) il problema non esiste: un numero con 2^32 cifre è qualcosa di talmente gigantesco che ti servirebbe un foglio lungo kilometri per scriverlo.
    Se invece intendi il vettore in cui schiaffi i numeri, una soluzione naive potrebbe essere usarne tanti quanti te ne servono. Quando ne riempi uno passi al secondo e così via.

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  15. #30
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Quote Originally Posted by Axet View Post
    Se stai cercando di implementare quello che ho scritto nel reply precedente (cioè rappresentare un numero come un vettore dove ogni cifra corrisponde a una cella) il problema non esiste: un numero con 2^32 cifre è qualcosa di talmente gigantesco che ti servirebbe un foglio lungo kilometri per scriverlo.
    Se invece intendi il vettore in cui schiaffi i numeri, una soluzione naive potrebbe essere usarne tanti quanti te ne servono. Quando ne riempi uno passi al secondo e così via.
    Si, avevo pensato a una soluzione del tipo
    int num_it=numero/2^32;
    int *i;
    i=(int*)malloc(num_it*sizeof(int));
    E poi ogni volta che un i[k] arriva a 2^32 passo a quello dopo e come posizione uso num[i[2^32]+i[k]]
    Last edited by Brcondor; 12th December 2011 at 21:21.
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

Page 2 of 6 FirstFirst 123456 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
[Output: 113.71 Kb. compressed to 97.96 Kb. by saving 15.75 Kb. (13.85%)]