Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C] log2

    Ciao a tutti,
    avrei ancora bisogno di una mano...
    Ho un programma scritto in C e in un sottoprogramma c è una chiamata a log2. Ve la riporto :

    val=-val*log2(val);

    Ho inserito nel mio codice :

    #include <math.h>

    Ma quando vado a compilare ecco cosa succede :

    C:\Documents and Settings\alex\Documenti\Download\progetto\progetto \t2v1>bcc32 t2v1.c
    Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
    t2v1.c:
    Warning W8065 t2v1.c 397: Call to function 'log2' with no prototype in function entropy
    Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
    Error: Unresolved external '_log2' referenced from C:\DOCUMENTS AND SETTINGS\ALEX\DOCUMENTI\DOWNLOAD\PROGETTO\PROGETTO \T2V1\T2V1.OBJ

    A parte includere math.h,devo fare qualcos altro?

  2. #2
    Non mi risulta che in C sia già definita la funzione log2... la puoi comunque scrivere facilmente con la normale funzione log e la formula per il cambiamento di base del logaritmo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Quindi non ha senso specificare #include<math.h> ?

    Provo a scriverla e ti faccio vedere se va bene ok?

  4. #4
    Non riesco a scriverla
    Mi aiuteresti?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    http://www.ripmat.it/mate/a/al/alh.html

    codice:
    #include <math.h>
    
    double log2(double x)
    {
            return log(x) / log(2.);
    }
    every day above ground is a good one

  6. #6
    mi da qst errore :

    error E2356 t2v1.c 470: Type mismatch in redeclaration of log2

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come hai usato quel codice che ti hanno suggerito ?

    Cosa c'è scritto nel resto del tuo codice ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    E' lunghissimo

    Posso mettere il sottoprogramma k usa log2 :

    double entropy(struct st_node *t)
    {
    double val;

    if (t==NULL)
    return 0.;
    val=(double)(t->cf)/(double)wcnt;
    val=-val*log2(val);
    val=val+entropy(t->l);
    val=val+entropy(t->r);
    return val;
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da sandrinolli
    E' lunghissimo
    Ma è possibile che tratti codici così lunghi e complessi senza capirne nulla di C ?
    Scusa, ma mi pare assurdo ...

    Posso mettere il sottoprogramma k usa log2 :
    Non serve ... devi vedere dove è dichiarata la funzione

    log2

    o se esiste gia' un corpo per questa funzione da qualche parte nel sorgente (che non conosci) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Grazie,funziona...
    Grazie 1000

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.