Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    sqrt di un long long int in C

    Ciao a tutti,
    vi scrivo perche' ho un problema di cui non riesco proprio a venire a capo e mi sta facendo impazzire.
    Devo fare la radice quadrata di un numero che e' un long long int,ma ogni volta che ci provo usando sqrt() mi da un risultato che non c'entra nulla.
    Ho provato e riprovato con casting vari e conversioni di tipo della variabile ma non funziona mai.
    Al momento il mio codice e' rimasto cosi,

    long long int num=(long long int)sqrt((double)numero);

    purtroppo ho il problema che il tipo double se non sbaglio e' meno grande di un long long,di conseguenza credo non riesca a convertire il mio long long in un double,e forse puo' essere quello a generare l'errore.
    Avevo pensato di convertire il mio long long int in un long double(che dovrebbe essere grande abbastanza?)ma anche provando a convertire in un long double non funziona.

    Ho continuato a documentarmi e ho trovato info riguardo a alcuni problemi del mio compilatore (dev-c++) con i long double,e riguardo al fatto che i long double sono stati implementati nella revisione C99 del c,ma niente di specifico per la risoluzione del mio problema.

    Se sto facendo un errore logico io vi prego di aiutarmi a capire dove sbaglio,o magari se i miei ragionamenti sono giusti di provare a vedere se con compilatori diversi da' lo stesso errore.

    Sono certo che tutti quelli di voi che mi risponderanno lo sapranno gia',ma per chiarezza nei confronti degli altri che magari come me brancolano un pochino nel buio aggiungo che il compilatore visual c++ della microsoft tratta i long double come normali double,quindi suppongo non funzionerebbe a priori.

    Vi prego non ditemi che devo scrivermi una funzione longsqrt() apposita,mi metterei a piangere

  2. #2
    Scusate se posto di nuovo ma sono passati 60 minuti e non mi fa editare il post iniziale.
    Volevo aggiornarvi sulla situazione.
    Per ora ho trovato un modo per "aggirare" l'errore ,
    convertendo il mio numero long long int in una stringa utilizzando sprintf(),
    e poi dando all'sqrt() quella stringa riconvertita in double con atof() .
    Certo non e' un gran metodo e probabilmente apre la porta a mille possibili errori con numeri di grandi dimensioni,ma almeno un minimo funziona
    Sono sempre ben accette soluzioni e/o correzioni ,io piu di questo non sono in grado di fare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.