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

ANSI C / C++ : o megaliteros unsigned integer? (gia "for" looping)


Stilewag

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

Δημοσ.

Poios einai o megaliteros unsigned integer stin ANSI C / C++?

 

To xreiazomai gia ena looping me 4*10^45 loops (!)

 

Aftin tin stigmi doulevw se Borland C++ 2.0 (DOS, 1990-1991).... tin vrisko pio voliki gia na mathw C/C++ apo to perivalon tou C++ Builder and tis MS-Visual C++, kai fisika pio filiki apo ta free command line tools tis Borland.

Δημοσ.

απο περιέργια και μόνο , τι φτιάχνεις που θέλει τόσα loops?

Όχι τίποτα άλλο , μπας και υπάρχει κάποια καθαρή λύση.

Δημοσ.

:)

 

Thelw na ftiaksw ena programma brute force. O xristis mporei na xrisimopoiisei ena alfavito 96 xaraktirwn (oi xaraktires tou pliktrologiou), kai mia leksi 20-200 xaraktirwn. Ti na kanw gia na valw to PC na dokimasei olous tous pithanous sindiasmous? Kserw vevaia oti tha kanei aiwnes, alla thelw na dw pws ginetai o algorithmos.

Δημοσ.

μαλλον δεν πρεπει να χρησιμοποιησεις το for τοτε..γι'αυτο σε οδηγησε σε αδιέξοδο με το ποσο μεγαλος ειναι ο int και αν υπαρχει πιο μεγάλο..

χρησιμοποίσηε κάποια άλλη δομή που θα σου επιτρέψει πολλαπλές επαναλήψεις χωρις το αγχος μεγάλου counter...

 

να πουμε ενα while( ΄βρεις οτι θες..δεις ολους τους συνδιασμους){

 

'ψαχνε'

}

Δημοσ.

an thelw na kanw pause etsi wste na ksanaepistrepsw ti kanw?

 

episeis otan thelw na dokimasw mono ena meros twn pithanwn sindiasmwn?

 

an eixa enan arkountos megalo arithmo tote afta ta 2 lynontai

 

Exw dei sto help tis Borland C++ 2.0 oti o megaliteros arithmos einai o double pou mporei na paei mexri 300 psifia!!! mipws den katalava kala? ...an afto isxuei, tote tha ton xrisimopoiisw, den nomizw na peirazei pou exei ipodiastoli

 

Episeis, einai dinaton me mia vivliothiki (.h) na mporesw na xrisimopoiisw ton Pentium1 (grigoro gia ta dedomena tis Borland C++ 2.0) gia na mporesw na apothikefsw kai na epeksergastw enan toso megalo arithmo?

 

An oxi me ton Pentium, tote me MMX usage isws i kapoia alli texnologia synxronwn epeksergastwn?

Δημοσ.

i Borland C++ 2.0 vgazei to ekseis help minima gia tous long double:

 

--- message begin ---

double (keyword)

long double (keyword)

 

Real number data types

 

Variables of type double are four words in length. Their range is 1.7E-308 to 1.7E+308. Variables of type long double are five words in length. Their range is 3.4E-4932 to 1.1E+4932

 

Use of double or float requires linking in the floating-point math package. Borland C++ will do this automatically if you use floating point in your program.

--- message end ---

 

Afto simainei oti mporw na exw 4000 psifia?! Kai malista an einai signed na to kanw 8000?!!!

Δημοσ.

Μην κοιτάς το range, να κοιτάς τα σημαντικά ψηφία (που γράφονται επίσης στο help). Αν ένας floating point αριθμός σου δίνει 18 σημαντικά ψηφία, τότε ...να το πω χοντρικά για να καταλάβεις στα γρήγορα, ξέρει να "μετράει πολλά τρισεκατομμύρια" αλλά κάνει τόσο μεγάλη στρογγύλευση που χάνει τα εκατομμύρια, τις χιλιάδες και τις μονάδες. Με άλλα λόγια μπορείς να έχεις 8000 ψηφία, απλά τα τελευταία 7980 από αυτά θα είναι μηδενικά :-).

 

Για το πρόβλημά σου ΔΕΝ κάνουν οι floating point, θέλεις μεγάλους ακέραιους. Μπορείς να χρησιμοποιήσεις βιβλιοθήκες, αλλά η software-emulation λύση είναι αρκετές δεκάδες φορές πιο αργή από τις δυνατότητες του hardware.

 

Για να δοκιμάσεις ένα υποσύνολο των περιπτώσεων (χωρίς να τα πάρεις με την σειρά) χρειάζεσαι μια συνάρτηση hashing.

Δημοσ.

Δεν είναι τίποτα φοβερό. Είναι απλά μια αντιστοίχιση (μερικές 1-προς-1) ενός input συνόλου σε ένα output σύνολο. Με άλλα λόγια ένα ψευδοτυχαίο ανακάτεμα. Η διαφορά του από μία random είναι ότι δεν θα σου τυχαίνει συχνά να "τσεκάρεις" τον ίδιο συνδυασμό.

 

Φυσικά δεν συζητάμε να κωδικοποιήσεις τον MD5, υπάρχουν αρκετές πιο απλές τέτοιες συναρτήσεις που δεν θα "ιδρώσεις" για να τις υλοποιήσεις ;-) Με λίγο googling θα βρεις και κατάλληλη συνάρτηση και τον αντίστοιχο κώδικα.

Δημοσ.
Μην κοιτάς το range' date=' να κοιτάς τα [b']σημαντικά[/b] ψηφία (που γράφονται επίσης στο help). Αν ένας floating point αριθμός σου δίνει 18 σημαντικά ψηφία, τότε ...να το πω χοντρικά για να καταλάβεις στα γρήγορα, ξέρει να "μετράει πολλά τρισεκατομμύρια" αλλά κάνει τόσο μεγάλη στρογγύλευση που χάνει τα εκατομμύρια, τις χιλιάδες και τις μονάδες. Με άλλα λόγια μπορείς να έχεις 8000 ψηφία, απλά τα τελευταία 7980 από αυτά θα είναι μηδενικά :-).

 

Για το πρόβλημά σου ΔΕΝ κάνουν οι floating point, θέλεις μεγάλους ακέραιους. Μπορείς να χρησιμοποιήσεις βιβλιοθήκες, αλλά η software-emulation λύση είναι αρκετές δεκάδες φορές πιο αργή από τις δυνατότητες του hardware.

 

Για να δοκιμάσεις ένα υποσύνολο των περιπτώσεων (χωρίς να τα πάρεις με την σειρά) χρειάζεσαι μια συνάρτηση hashing.

 

Thelw na domikasw tis vivliothikes me tin software-emulation lisi gia na dw an mporw na anteksw to poso argo tha einai.

 

Poies vivliothikes tis C/C++ prepei na xirismipoiisw?

Δημοσ.

Δεν υπάρχει emulation για integers > 64 bit στις έτοιμες βιβλιοθήκες τις C/C++. Πρέπει να κατεβάσεις από το internet την αντίστοιχη βιβλιοθήκη και να την ενσωματώσεις στο πρόγραμμά σου. Π.χ. στη διεύθυνση http://www.swox.com/gmp/ θα βρεις μια βιβλιοθήκη της gnu για arbitrary precision. Θα έλεγα να το αφήσεις για αρχή, μέχρι να αποκτήσεις λίγο περισσότερη εμπειρία...

Δημοσ.

Den xriazete na einai ena for, mporeis na exeis osa thes p.x.

 

for(int x=0; x==0xFFFFFFFF; x++)

for(int y=0; y==0xFFFFFFFF; y++)

{

/* code */

}

 

Akoma mpories na grapseis se SSE i SSE2. To SSE exei 128bit registers dil. 2^128 loops. Alla distixos prepei na grapseis assembly kati pou den to proteino stin parousa fasi.

 

Akoma mporeis na kaneis to programma sou se kanenan Cray supercomputer :)

 

 

PS: to noumero ton loops pou zitas einai pantos eksopragmatiko

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

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

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