+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 2 su 2

Problema cifre decimali

  1. #1
    Mitchdiuk non è in linea Novello
    ciao a tutti
    ho un problema con un prgramma, vi copio il codice

    #include <math.h>
    #include <stdio.h>
    
    int main(void)
    {
        double h1, h2, h3, l1, l2;
        double A, B, D, aa, bb, dd, delta, X, k, y, Kw, IL;
        printf("h1 \n");
        scanf("%lf", &h1);
        printf("h2 \n");
        scanf("%lf", &h2);
        printf("h3 \n");
        scanf("%lf", &h3);
        printf("l1 \n");
        scanf("%lf", &l1);
        printf("l2 \n");
        scanf("%lf", &l2);
    
        {
        aa = ((l1 * l1) + ((h3 - h1) * (h3 - h1)));
        A = (sqrt(aa));
        bb = ((h3 - h2) * (h3 - h2)) + ((l2 - l1) * (l2 - l1));
        B = (sqrt(bb));
        dd = (l2 * l2) + ((h2 - h1) * (h2 - h1));
        D = (sqrt(dd));
        delta = (A + B - D);
    
        X=(-(1/(2,3*2000)))*(sqrt((A*B*D)/(2*delta)));
    
        k = 10;
        Kw = (pow(k, X));
        y = (3 + (60 * delta * Kw));
        IL = ((10 * (log10(y))));
    
        printf("Insertion Loss: %.3lf \n", IL);
        }
    
        system("pause");
        return 0;
    }
    
    Fino a "delta" funziona tutto bene, qui non riesco a capire perchè la variabile X diventa zero.
    Inserendo i seguenti input
    h1 = 1
    h2 = 2
    h3 = 5
    l1 = 5
    L2 = 50
    dovrei ottenre
    X = -0,015
    Kw = 0,965
    IL = 19,5

    Ultima cosa, ho controllato più volte le funzioni che risultano corrette.

    Grazie
    ciao!
    Ultima modifica di M.A.W. 1968; 06-04-2010 17:32  Motivo: Formattazione del codice

  2. #2
    Benvenuto nel forum. Approfitta dell'occasione per dare un'occhiata al nostro Regolamento, e magari anche allo sticky thread su come è opportuno formattare il codice C/C++ per presentarlo nei post.

    Nel codice da te proposto vi sono palesi errori, in particolare errori sintattici di specifica delle costanti nelle espressioni, ma anche errori di progetto con scarsa attenzione agli aspetti prestazionali e all'accumulo di errori floating point.

    Il più grave errore consiste senz'altro nell'aver utilizzato la virgola nella sottoespressione
    -(1/(2,3*2000))
    
    Tale scrittura non ha assolutamente, per un compilatore C, il senso che si intenderebbe. Le costanti che referenziano numeri "reali" con segno, in C/C++, sono infatti univocamente caratterizzate dall'uso della notazione anglosassone per il separatore delle cifre decimali, nonché da un eventuale suffisso costituito da un singolo carattere, come chiaramente indicato - ad esempio - in questo reference.

    In C e C++ l'operatore "virgola" assume tutt'altro significato, che nessuna attinenza ha con l'uso corrente del simbolo in ambito matematico/attuariale nell'area europea.

    Riguardo agli altri aspetti di progetto, si devono sempre e comunque utilizzare costanti di tipo adeguato (ovvero float, come minimo) nelle espressioni, dunque si avrà sempre 1.0 in luogo di 1, e così via, salvo ogni ulteriore uso di cast espliciti.
    E' inoltre assolutamente opportuno spezzare le espressioni complesse, anche a costo di utilizzare esplicitamente variabili temporanee per i risultati intermedi (lo farà comunque il compilatore, in background, e certo con molta meno "intelligenza" di un qualsiasi programmatore).

    Sarebbe parimenti opportuno ricordare che le capacità di calcolo e rappresentatività del formato floating point non hanno alcunché di miracoloso, e anzi vanno "aiutate" spezzando e riscrivendo in modo idoneo le espressioni. Non è certo questa materia affrontabile in un post su un forum, ma esistono fior di manuali, thread ed articoli che è opportuno quantomeno sfogliare prima di affidare calcoli di varia complessità ad una routine in C/C++ (o anche ad un applicativo dedicato, da Matlab a SAGE).
    ℹ️ Leggi di più su M.A.W. 1968 ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. cifre decimali esatte
    Da CESABAS nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 06-05-2019, 09:51
  2. Cifre decimali
    Da Rochy Joe nel forum Microsoft Excel
    Risposte: 2
    Ultimo Post: 07-03-2018, 17:45
  3. Problema con cifre decimali
    Da newpc82 nel forum Visual Basic 6
    Risposte: 11
    Ultimo Post: 18-02-2007, 16:07
  4. Problema con cifre decimali
    Da dade_n nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 16-02-2007, 20:15
  5. textbox e cifre decimali
    Da Master85 nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 19-05-2004, 11:05