PDA

Visualizza la versione completa : [C] Implementare una funzione log2


sandrinolli
23-03-2010, 17:51
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? :(

MItaly
23-03-2010, 18:28
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.

sandrinolli
23-03-2010, 18:33
Quindi non ha senso specificare #include<math.h> ?

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

sandrinolli
23-03-2010, 18:46
Non riesco a scriverla :(
Mi aiuteresti?:(

YuYevon
23-03-2010, 18:59
http://www.ripmat.it/mate/a/al/alh.html



#include <math.h>

double log2(double x)
{
return log(x) / log(2.);
}

sandrinolli
23-03-2010, 19:18
mi da qst errore :

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

oregon
23-03-2010, 19:27
Come hai usato quel codice che ti hanno suggerito ?

Cosa c' scritto nel resto del tuo codice ?

sandrinolli
23-03-2010, 19:28
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;
}

oregon
23-03-2010, 19:40
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) ...

sandrinolli
23-03-2010, 19:59
Grazie,funziona...
Grazie 1000 :)

Loading