Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Illegal use of floating point
Forum - C/C++ - Illegal use of floating point

Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 22:03
Mercoledì, 19/06/2013
Questa è la dichiarazione
Codice sorgente - presumibilmente C++

  1. struct dati{
  2.         float x1;
  3.         float x2;
  4.         float y1;
  5.         float y2;
  6.         float lunghezza[MAXDIM];
  7. };
  8.  
  9. struct lista{
  10.         int n;
  11.         dati segmenti[MAXDIM];
  12. };



e' questa è la porzione di codice che mi da errore

Codice sorgente - presumibilmente Plain Text

  1. l.segmenti[i].lunghezza=sqrt((l.segmenti[i].x1-l.segmenti[i].x2)^2+(l.segmenti[i].y1-l.segmenti[i].y2)^2);



Qual'è il problema?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:07
Mercoledì, 19/06/2013
Ciao!

Con la tua riga di codice, tu calcoli la distanza tra due punti.
A tale scopo usi l' operatore ^ per l'elevamento a potenza. Purtroppo quest' ultimo è l'operatore bit a bit or esclusivo ( XOR ) ( http://alessioxx.altervista.org/blog/?p=238 ). Di conseguenza il risultato non sarà corretto.
Inoltre il campo lunghezza essendo dichiarato come vettore, bisogna indicare l' indice corrispondente.

PM Quote
Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 20:06
Giovedì, 20/06/2013
No c'è un for... hai ragione e' così che lo devo scrivere?
Codice sorgente - presumibilmente Plain Text

  1. for(int i=0; i < l.n; i++){
  2.                 l.segmenti[i].lunghezza=sqrt(pow((l.segmenti[i].x1-l.segmenti[i].x2),2)+pow((l.segmenti[i].y1-l.segmenti[i].y2),2));
  3.         }


PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 20:55
Giovedì, 20/06/2013
Sembra corretto. Nel programma funziona?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:05
Giovedì, 20/06/2013
questo ti assicuro funziona, è preso da una mia classe:
Codice sorgente - presumibilmente C/C++

  1. DistanzaPuntoPunto(Punto* PrimoPunto, Punto* SecondoPunto)
  2. {
  3.         return sqrt(pow(PrimoPunto->Ascissa() - SecondoPunto->Ascissa(),2) + pow(PrimoPunto->Ordinata() - SecondoPunto->Ordinata(),2));
  4. }



occhio ad usare sqrt, perchè ritorna un double non un float e potresti perdere per strada bit

PM Quote
Avatar
quello che non so come si chiama (Normal User)
Rookie


Messaggi: 37
Iscritto: 08/01/2013

Segnala al moderatore
Postato alle 21:16
Giovedì, 20/06/2013

Codice sorgente - presumibilmente Plain Text

  1. l.segmenti[i].lunghezza=sqrt((l.segmenti[i].x1-l.segmenti[i].x2)^2+(l.segmenti[i].y1-l.segmenti[i].y2)^2);


A parte quanto detto da Poggi Marco, mi sembra che tu tenti di mettere un valore float in un float[], in quanto lunghezza è dichiarato come array di float...
Dovresti fare l.segmenti.lunghezza=..... per non avere errori, ma così su 2 piedi mi sembra che l'errore sta più nell'aver dichiarato lunghezza come array

PM Quote
Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 12:11
Venerdì, 21/06/2013
Si e' giusto, l'errore era su lunghezza anche, infatti mi dava lo stesso errore pur usando pow e mi pareva strano!
Ora funziona vi ringrazio!:k:

PM Quote