Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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?


"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 951
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.


Nulla va più veloce della luce, quindi rilassati.
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.         }



"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 951
Iscritto: 05/01/2010

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


Nulla va più veloce della luce, quindi rilassati.
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:


"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote