vamos Δημοσ. 5 Ιουλίου 2005 Δημοσ. 5 Ιουλίου 2005 Geia xara, antimetopizo to eksis provlima. exo ena txt arxeio pou perilambanei tis eksis times: --------------- 0.553842 0.643939 0.416941 0.876019 0.234986 0.429439 0.680470 0.322184 0.600104 0.131541 --------------- Apothikeuo tis times autes, se ena GSL vector os eksis: FILE * f1 = fopen("data.txt","r"); for (i=0; i<n; i++) { fscanf(f1,"%lf ", &(Y->data)); fscanf(f1,"\n"); } kai otan tis typono me printf pairno auto: for ( ... ) { printf("%.20lf\n", Y->data) } 0.55384199999999995000 0.64393900000000004000 0.41694100000000001000 0.87601899999999999000 0.23498600000000000000 0.42943900000000002000 0.68047000000000002000 0.32218400000000003000 0.60010399999999997000 0.13154099999999999000 eno tha perimena kati tetoio: 0.55384200000000000000 0.64393900000000000000 .... Giati ginetai auto? Pos mporei na diorthothei? kamia idea? eida sto net: http://www.eskimo.com/~scs/C-faq/q14.1.html alla den dinei apantisi, sto pos tha lynetai auto to provlima. euxaristo ek ton proteron. Thodoris
alkisg Δημοσ. 6 Ιουλίου 2005 Δημοσ. 6 Ιουλίου 2005 Γενικά δεν διορθώνεται, η ακρίβεια του Η/Υ είναι πάντα περιορισμένη. 1) Κατά την εκτύπωση μπορείς να τυπώνεις λιγότερα ψηφία, ώστε να στρογγυλεύεται στα αρχικά, ή 2) Χρησιμοποίησε μια βιβλιοθήκη για "μεγάλους αριθμούς" οι οποίοι σου δίνουν πάρα πολύ μεγάλη ακρίβεια: http://www.swox.com/gmp/ GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. GMP has a rich set of functions, and the functions have a regular interface.
skouket Δημοσ. 8 Ιουλίου 2005 Δημοσ. 8 Ιουλίου 2005 Geia xara' date=' antimetopizo to eksis provlima. exo ena txt arxeio pou perilambanei tis eksis times: --------------- 0.553842 0.643939 0.416941 0.876019 0.234986 0.429439 0.680470 0.322184 0.600104 0.131541 --------------- Apothikeuo tis times autes, se ena GSL vector os eksis: FILE * f1 = fopen("data.txt","r"); for (i=0; i<n; i++) { fscanf(f1,"%lf ", &(Y->data[i'])); fscanf(f1,"\n"); } kai otan tis typono me printf pairno auto: for ( ... ) { printf("%.20lf\n", Y->data) } 0.55384199999999995000 0.64393900000000004000 0.41694100000000001000 0.87601899999999999000 0.23498600000000000000 0.42943900000000002000 0.68047000000000002000 0.32218400000000003000 0.60010399999999997000 0.13154099999999999000 eno tha perimena kati tetoio: 0.55384200000000000000 0.64393900000000000000 .... Giati ginetai auto? Pos mporei na diorthothei? kamia idea? eida sto net: http://www.eskimo.com/~scs/C-faq/q14.1.html alla den dinei apantisi, sto pos tha lynetai auto to provlima. euxaristo ek ton proteron. Thodoris Ο κωδικας σου ειναι λανθασμενος. Στις συναρτησεις scanf και printf πρεπει να χρησιμοποιησεις σαν τροποποιητη το L για τους αριθμους κινητης υποδιαστολης.Ο τροποποιητης l ειναι για ακεραιους. Δηλαδη δωσε Lf και οχι lf. π.χ. scanf("%Lf", &Float_point_variable ); αντιστοιχα scanf("%lf", &integer_variable ); τα ιδια και για την printf .
alkisg Δημοσ. 9 Ιουλίου 2005 Δημοσ. 9 Ιουλίου 2005 Το l είναι για doubles, το L για long doubles, και συγκεκριμένα στην VC double=long double. http://www.rt.com/man/scanf.3.html http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_scanf_width_specification.asp
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.