Numeri in c++

di il
6 risposte

Numeri in c++

Salve a tutti
come si fa a capire quando un numero finisce,
nel programma sottostante c'è un errore ma non riesco a capire qual' è
l'errore che ho riscontrato e che visualizza più cifre di quante ne dovrebbe stampare.

#include "stdafx.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
	double numero;
	int conta,xyz;
	conta=1; xyz=1;
	cout << " Null vale " << indy << endl;
    numero=1.23459144;
	cout.precision(10);
	cout << "prima della procedura numero = " << numero << endl;
	cout << " all'interno della procedura " << endl;
	xyz = numero;
	while (xyz != 0)
	     {
			 
			 cout << "xyz = " << xyz << "----------";
			 numero = numero - xyz;
			 numero = numero * 10;
			 xyz = numero;
			 cout << "numero = " << numero << endl;
			 conta++;
			 
	     }
	cout << " conta= " << conta << endl;
	return 0;
}
sperando che questa e la volta buona
ringrazio anticipatamente chiunque mi dia una mano.
p.s. ho gia provato a mettere il numero in una stringa ma non ha funzionato.

6 Risposte

  • Re: Numeri in c++

    Credo valga la pena che leggi questo:
    http://cplusplus.com/reference/iostream/ios_base/precision/
  • Re: Numeri in c++

    Purtroppo non va bene perchè presenta un grande problema che è il seguente:
    se il numero è costante allora con quest tecnica non ci sarebbero problemi
    ma se io non conosco il numero si potrebbero verificare 2 casi
    1) il numero verrebbe troncato se fisso una dimensine ben specifica e il numero e più grande.
    esempio:
    se fisso il campo a 5 cifre il numero 1.23459144 diventerebbe 1.23459 che come si vede non è la stessa cosa del numero originale.
    2) il numero verrebbe allargato se fisso una dimensione eccessiva e il numero e più piccolo.
    esempio:
    se fisso il campo a 10 cifre il numero 1.23459144 diventerebbe 1.2345914400 che come si vede non è la stessa cosa del numero originale.
    e purtroppo in applicazioni matematiche la precisione e fondamentale.

    grazie comunque per il tentativo.
  • Re: Numeri in c++

    se fisso il campo a 10 cifre il numero 1.23459144 diventerebbe 1.2345914400 che come si vede non è la stessa cosa del numero originale.
    e purtroppo in applicazioni matematiche la precisione e fondamentale.
    matematicamente i due numeri sono identici. Se non ti piacciono gli zeri eccedenti devi trattare con le stringhe 'trimmando' gli zeri in eccesso
    
    void precision_trim (char *buff)
    {
       int l;
      for (l=strlen(buff)-1;l>=0 && buff[l]=='0' && buff[l]!='.';l--)
    	buff[l]='\0';
      if (buff[l]=='.') buff[l]='\0';
    }
    
  • Re: Numeri in c++

    Proverò dovrebbe funzionare grazie
  • Re: Numeri in c++

    Io pensavo che il problema lo avevi con la precision(), invece è tutt'altra cosa. Se vuoi sapere quanti numeri ha la variabile e visualizzarle a video, consiglio di non usare variabili float, queso perché alcuni numeri 'reali' non appartengono all'insieme dei floating-point, quindi c'è la possibilità che il numero sia approssimato a quello più prossimo o addirittura venga segnalato underflow o overflow. Potresti giustamente acquisire dallo stdin il numero e salvarlo in una variabile di tipo stringa, e poi successivamente stamparti ogni singolo valore.
  • Re: Numeri in c++

    Il problema e che prima di stamparlo il numero ci devo fare dei calcoli ecco perchè deve essere un floating-point e se lo accetterei come stringa incorrerei nel problema opposto di doverlo convertire prima in numero e poi in stringa nuovamente dopo aver fatto i calcoli.
Devi accedere o registrarti per scrivere nel forum
6 risposte