Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
La seconda generazione della citycar elettrica di Dacia passa alla piattaforma RGEV small di Renault Group, cresce di 15 cm in lunghezza e 18 cm in larghezza, adotta un motore da 80 CV e una batteria LFP da 27,5 kWh per 250 km WLTP. Prezzi da 17.900 euro, produzione a Novo Mesto in Slovenia.
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-09-2007, 16:28   #1
piumone
Member
 
Iscritto dal: Jun 2007
Messaggi: 62
[C] Dichiaro float ma assegno un numero reale..

E' un grave errore vero? Mi spiego nel programma che avevo da fare all'esame dovevo leggere un file contentente numeri reali, nella tensione ho fatto confusione ed ho assegnato ad una variabile float il numero reale letto da quel file. Come valuteranno la cosa??
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 16:38   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
C'è qualcosa che non mi torna...un float è la rappresentazione di un numero reale...cosa c'è che non va ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 16:47   #3
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16216
Se per leggere il numero dal file hai usato fscanf(filepunt,"%f",&var) con var di tipo float, non dovrebbero esserci problemi, perché ci pensa fscanf a convertire la stringa di caratteri che rappresenta il numero, in un valore float da assegnare alla variabile.

Se però hai usato quella sintassi e var era double, allora probabilmente immagazzinerai un valore sbagliato, perché il formattatore corretto per i double è %lf e non %f, e fscanf non reinterpreta automaticamente i puntatori a float come puntatori a double.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 12-09-2007 alle 16:50.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 16:53   #4
piumone
Member
 
Iscritto dal: Jun 2007
Messaggi: 62
Quote:
Originariamente inviato da cionci Guarda i messaggi
C'è qualcosa che non mi torna...un float è la rappresentazione di un numero reale...cosa c'è che non va ?
Scusa hai ragione, pensavo di aver sbagliato invece ho fatto giusto, ne approfitto per chiederti: come si fa (in c) per vedere se un numero reale scelto a caso è divisibile per 5?
Codice:
if numreale%5==0
può andare?
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 16:57   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da piumone Guarda i messaggi
Codice:
if numreale%5==0
può andare?
No, l'operatore % è utilizzabile solo con operandi di tipo intero.

Comunque te la cavi usando la funzione standard fmod().
http://cppreference.com/stdmath/fmod.html
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 16:58   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No...quello si fa con la divisione intera.
Per il reale in teoria non lo potresti fare...ogni reale è divisibile per qualunque numero reale o intero (escluso 0).
Sicuro che non dovevi leggere un numero intero ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 16:59   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da andbin Guarda i messaggi
Comunque te la cavi usando la funzione standard fmod().
Però fare un fmod e poi controllare se il resto è uguale a 0 è un bel rischio
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 17:01   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da cionci Guarda i messaggi
Però fare un fmod e poi controllare se il resto è uguale a 0 è un bel rischio
Perché?
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 17:16   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da andbin Guarda i messaggi
Perché?
Perché ci sono i limiti di rappresentabilità...non tutti gli interi all'interno dell'intervallo di rappresentabilità sono rappresentabili su un double, ancor più su un float.

Ad esempio:
Codice:
#include <stdio.h>
#include <math.h>

int main()
{
  float f = 21141235;

  printf("%f\n", f);

  if(fmodf(f,5.0) == 0)
    printf("multiplo di 5\n");

  printf("%f\n", fmodf(f,5.0));

  return 0; 
}
Ora questo è un errore di rappresentazione macroscopico, ma possono essere anche più bassi, dopo diverse operazioni sui floating point.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 17:21   #10
piumone
Member
 
Iscritto dal: Jun 2007
Messaggi: 62
Quindi per vedere se un reale è divisibile per 5 devo fare per forza l'fmod? visto che nei reali ci sono anche gli interi nel caso avessi letto per dire 25 il comando %5 sarebbe stato lecito oppure no? Mi sa di no eh.. :-(
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 17:23   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Avresti dovuto fare:

if((int)f % 5 == 0)

ma in ogni caso se avessi letto 25.1111 ti avrebbe dato comunque 0...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 17:28   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da cionci Guarda i messaggi
Perché ci sono i limiti di rappresentabilità...non tutti gli interi all'interno dell'intervallo di rappresentabilità sono rappresentabili su un double, ancor più su un float.
Sì lo so, un float ha una precisione di circa 7 digit e un double di circa 16 digit.
Se ragioniamo su questi casi al limite della precisione, il problema indubbiamente c'è, sono d'accordo.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2007, 17:39   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da andbin Guarda i messaggi
Se ragioniamo su questi casi al limite della precisione, il problema indubbiamente c'è, sono d'accordo.
Però ci può essere non solo in questi casi macroscopici...ma anche dovuti all'accumulo di errori di rappresentabilità su operazioni successive. Se mi metto a fare una lunga serie di operazioni e poi alla fine arrivo ad un risultato che so dovrebbe essere multiplo di 5, è abbastanza probabile che non lo sia
Basta trovarsi per la strada un numero reale non rappresentabile...

Anzi...con i float la lista di operazioni non deve essere nemmeno tanto lunga,

Codice:
#include <stdio.h>
#include <math.h>

int main()
{
  float f = 155.0;

  f += 662.23;
  f -= 662.23;

  printf("%f\n", f);

  if(fmodf(f,5.0) == 0)
    printf("multiplo di 5\n");

  printf("%f\n", fmodf(f,5.0));

  return 0; 
}
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa Nuova Dacia Spring, del modello precedente resta...
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Amazon, pioggia di offerte sulle bici el...
Intel Core Ultra 7 260K esiste ma non po...
Una lettera promette una rivolta contro ...
SpaceX ha lanciato la missione Flight 15...
NVIDIA cerca il successore di Jensen Hua...
La CNSA annuncia la missione Tianwen-4 v...
Una valanga di wafer e memorie incombe s...
Microsoft 365, miglioramenti dopo il dow...
Un'IA attacca la tua azienda, ma per dif...
TSMC investe 1 miliardo di dollari in Op...
Niente più risposte IA nelle ricerche: M...
Allarmi bomba nelle scuole, il Viminale:...
OpenAI incassa 10 miliardi in tre mesi, ...
Continua il Black Friday Engwe: sconto e...
OnePlus 12 riceve Android 17 con una set...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v