Προς το περιεχόμενο

Γλώσσα C. SOS


TheGreek

Προτεινόμενες αναρτήσεις

Δημοσ.

Ο τελεστής % υπολογίζει το ακέραιο υπόλοιπο διαίρεσης.

 

Εχω ένα a π.χ. 4.5 επί 10 εις την 140 και b=136.

 

Πως θα τις δηλώσω τις μεταβλητές για να μπορέσω

να κάνω c=a%b χωρίς πρόβλημα?

Δημοσ.

οπως και να τις δηλωσεις αν ειναι στην 140 θα ειναι παντα out of range.

Αυτο που μπορεις να κανεις ειναι να γραψεις ενα υποπρογραμμα που θα παραγοντοποιει την δυναμη κανοντας την διαιρεση με πιο μικρους αριθμους...

Δημοσ.

η πραξη (4.5*10)^140 παραγει πολυ μεγαλο αριθμο.

 

σε μια δικη μου περιπτωση που ηθελα να δουλεψω μεγαλους αριθμους ο χρηστης dop μου προτεινε αυτο:

 

Η καλύτερή σου λύση είναι να βρεις κάποια βιβλιοθήκη που να παρέχει Big Integers - ουσιαστικά είναι βιβλιοθήκες που χρησιμοποιούν δυναμικά arrays για να παρέχουν όσο μεγάλους int ακόμα και floats θες.
Δημοσ.
Ο τελεστής % υπολογίζει το ακέραιο υπόλοιπο διαίρεσης.

 

Εχω ένα a π.χ. 4.5 επί 10 εις την 140 και b=136.

 

Πως θα τις δηλώσω τις μεταβλητές για να μπορέσω

να κάνω c=a%b χωρίς πρόβλημα?

 

Ο τελεστής % (modulus) δεν μπορεί να εφαρμοσθεί σε float ή double, long double μεταβλητές, μπορείς όμως να χρησιμοποιήσεις τις αντίστοιχες εντολές fmod (για double) και fmodl (για long double), πχ. fmod(a,B) κτλ.

Τέλος με τις modf (double) και modfl (long double) μπορείς να σπάσεις τον floating-point αριθμό στα δυο κομμάτια του (ακέραιο και υπόλοιπο).

Και οι τέσσερις ρουτίνες είναι δηλωμένες στο math.h

 

Σχετικά με το μέγεθος των αριθμών, η long double προσφέρει αριθμούς μέχρι 80bits (ακρίβια 18 ψηφίων για τον Compiler μου) από εκεί και πέρα ότι είπαν οι προηγούμενοι φίλοι.

 

Καλή συνέχεια.

Δημοσ.

οπως σου ειπα και πιο πριν η διαιρεση modulus γινεται αν παραγοντοποιησεις την δυναμη.

 

το 140 = 2^7 + 2^3 + 2^2

>
(4.5*10)^140%136= (((10^2%136)^7%136)*((10^2%136)^3%136)*((10^2%136)^2%136)*4.5%136



=72

 

δοκιμασε το

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...