Non riesco a capire perché in alcune circostanze il calcolo in virgola momile mi restituisce numeri interi, perdendo i decimali, vi faccio qualche esempio.
Se scrivo cosi: tempo=constrain((4*((a*256)+b))/1000,-999,999);
dove tempo e' un float, a e b sono byte.
Il risultato di tempo mi perde i decimali.
mentre se scrivo cosi:
la moltiplicazione ha priorità su somma, puoi togliere parentesi su a*256
Il C fa i calcoli un pezzo alla volta, avendo costanti es. 256 ed a e b interi fa calcoli interi, poi passa agli altri dove trova una divisione /1000 ancora tra interi. Alla fine il risultato intero te lo piazza nel float.
Praticamente sei tu che sapendo che il risultato sarà un float devi forzare il calcolo.
Grandioso, funziona alla perfezione!! Ti ringrazio.
Io pensavo che la forzatura nel calcolo lo facesse il formato della variabile di uscita, invece, grazie a te, ho capito che lo fa calcolo per calcolo...
Perfetto.
Il casting viene fatto anche durante i calcoli, siccome le formule che usi sono complesse il compilatore deve usare dei contenitori temporanei per i dati e qui entra il gioco l'autocasting per cui è sempre meglio, se vuoi essere certo che le cose siano fatte come vuoi tu, esplicitare la conversione come ti ha fatto vedere nid69.
Infatti mi aspettavo che il compilatore se ne accorgesse da solo, visto che io voglio in uscita un float.
Comunque ora sapendo come si comporta so che devo imporgli il formato. LOCK ne approfitto per chiederti un consiglio, a te diretto ma anche agli altri.
Vorrei ampliare le mie conoscenze sul "C". Quale compilatore mi consigli di usare per far pratica? visto che spesso ne menzioni diversi tipi.
Deltoz:
Vorrei ampliare le mie conoscenze sul "C". Quale compilatore mi consigli di usare per far pratica? visto che spesso ne menzioni diversi tipi.
In che senso? Provare a fare dei semplici programmi per PC ad esempio in ambiente Windows (modalità testo o modalità finestra) ?
Puoi provare il free Dev-Cpp della bloodshed Home - Dev-C++ Official Website
Fanno anche un Pascal (stessa pagina)
@Lock personalmente ho una pessima opinione di quel libro da punto di vista didattico. E' la raccolta dei punti salienti del linguaggio e non un libro per insegnare il C. E' più un manuale tecnico per altri tecnici e non adatto a chi vuole imparare il C.
Logicamente opinione mia, personale e soggettiva.
Come mi spiegò tempo fa qualcuno (mi pare Guglielmo, ma potrei sbagliarmi perché ho la memoria volatile) quel libro è il reference del linguaggio. Non è un libro per imparare l'uso del C. Anch'io l'ho trovato troppo stringato, superficiale, che da troppe cose per scontate ma è appunto un libro rivolto a chi il linguaggio già lo conosce.
Per questo, preferisco una guida al C di quelle che si trovano a centinaia su internet anche in italiano, perché sono appunto guide rivolte a chi il linguaggio lo vuole imparare.
Accidenti...ho scatenato il putiferio..... :* :* :*
Allora, spiego meglio....
Io vengo da uno studio scolastico (informatica) in Turbo Pascal fatto 20 anni fa, e qualcosa di Visual Basic, sempre 20 anni fa, mi sono diplomato nel '96. Ho poi abbandonato la programmazione per dedicarmi all' informatica tecnica...per lavoro.
Nel frattempo, essendo appassionato, tra le tante altre cose, di elettronica, ho giochicchiato molto con i PIC creando circuiti e progetti per svariato utilizzo, ma aime' anche in quell' ambito ho abbandonato la programmazione testuale per passare ad una programmazione a blocchi logici, usavo il Visual Parsic. Da un annetto ho scoperto il mondo Arduino, e non ho fatto molta fatica ad entrare nella sua logica (sia software che hardware), ho rispolverato la logica di programmazione e velocemente ho imparato i pochi comandi che l' IDE Arduino supporta.
Il mio scopo e' quello di migliorare (ma sempre per uso amatoriale) la mia capacita' di sviluppo di codice per MPU, pero' vorrei anche imparare ad usare un programma che mi permetta di sviluppare semplici programmi, soprattutto grafici, in ambiente Windows, magari anche da usare come interfaccia ai progetti che faccio x MPU.
Quindi ho menzionato il "C" puro per ottimizzare il codice per MPU, ma per ambiente Windows forse e' meglio se uso qualcosa tipo Visual C, Visual Basic, Visual C#, Java-Processing.....bhoo insomma qualcosa di non troppo complicato per me viste le mie attuali conoscenze.
Tutto considerando che e' solo per divertimento, per hobby, e che gia' la famiglia, il lavoro e altri hobby mi portano via quasi tutto il tempo a disposizione.
Deltoz:
Accidenti...ho scatenato il putiferio..... :* :* :*
Quindi ho menzionato il "C" puro per ottimizzare il codice per MPU, ma per ambiente Windows forse e' meglio se uso qualcosa tipo Visual C, Visual Basic, Visual C#, Java-Processing.....bhoo insomma qualcosa di non troppo complicato per me viste le mie attuali conoscenze.
Tutto considerando che e' solo per divertimento, per hobby, e che gia' la famiglia, il lavoro e altri hobby mi portano via quasi tutto il tempo a disposizione.
No, nessun putiferio, anzi semplici scambi di opinioni. Fra l'altro siamo mi sembra abbastanza in accordo o quasi.
Se vuoi provare qualcosa di semplice puoi provare Processing che è Java (fratellastro del C++) e che puoi sfruttare anche con la libreria Firmata con Arduino (anche senza quella libreria) e ci sono esempi di uso Processing e Arduino con e senza libreria Firmata. (Processing gira anche su Linux e perciò su Raspberry Pi).
Non puoi disegnare nulla con il mouse, non è un IDE alla Visual Basic. Se vuoi qualcosa di semplice e disegnare le maschere allora consiglierei Visual Basic o Visual C#(poi tramite seriale comunichi con Arduino). Occhio che Visual C# è il corrispondente del VB, mentre il Visual C è un pò più complesso.