Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
Wireless 2.4 GHz, Bluetooth 5.4, cancellazione attiva del rumore, design pieghevole e un'autonomia che mette in imbarazzo prodotti che costano il doppio. Le Maestro 500 non eccellono in nulla, ma offrono tutto. E a questo prezzo è difficile chiedere di più
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-10-2007, 14:32   #1
santaclause83
Member
 
Iscritto dal: Mar 2006
Messaggi: 131
[C]algoritmo c per generare random,evitando la funzione rand()

la funzione rand() di c mi dà un problema anomalo se la inserisco in un determinato blocco del progetto..

ho provato a farmi una funzione che genera numeri random ma ho un pò arrangiato quello che mi ricordavo da un codice visto in passato,adesso il programma gira,ma l'algoritmo non è corretto

...qualcuno saprebbe dirmi se conosce un algoritmo più preciso di questo?..oppure dei link utili a riguardo


unsigned int nn = 4545;

float random() {

nn = (nn*12345 +1) & 0X7fff;

return (float) nn/0X7fff;

}

grazie!
santaclause83 è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 14:43   #2
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
come fa ad essere random sta funzione? parti da una costante, ti darà sempre lo stesso risultato...

se vuoi un qualcosa di più casuale intercetta in qualche modo l'ora di sistema e usala come base per qualche calcolo che restituisca il range di valori corretto. almeno sei sicuro che due esecuzioni del programma daranno con buona probabilità due risultati diversi
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 14:55   #3
santaclause83
Member
 
Iscritto dal: Mar 2006
Messaggi: 131
no asp,considera che l'inizializzazione fuori viene fatta una volta sola,poi la funzione viene chiamata a ripetizione da una callback..

ho visto un algoritmo simile ma non ricordo bene com'era esattamente..se avete idee a riguardo fate sapere,grazie!
santaclause83 è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 15:02   #4
Guille
Member
 
L'Avatar di Guille
 
Iscritto dal: Dec 2004
Città: Una palla di fango abitata da scimmie sognatrici
Messaggi: 128
Quote:
Originariamente inviato da santaclause83 Guarda i messaggi
no asp,considera che l'inizializzazione fuori viene fatta una volta sola,poi la funzione viene chiamata a ripetizione da una callback..

ho visto un algoritmo simile ma non ricordo bene com'era esattamente..se avete idee a riguardo fate sapere,grazie!
Si ma se l'inizializzazione è una costante ogni volta che eseguirai l'applicazione genererai sempre la stessa sequenza di numeri.
__________________
"Contro la stupidità gli stessi dei lottano invano" Friedrich Schiller
"Chi rinuncia alla libertà per raggiungere la sicurezza non merita né la libertà né la sicurezza" Benjamin Franklin
"Guardati dalla furia di un uomo tranquillo" John Dryden
Guille è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 15:10   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Guille Guarda i messaggi
Si ma se l'inizializzazione è una costante ogni volta che eseguirai l'applicazione genererai sempre la stessa sequenza di numeri.
infatti basta fare:
Codice:
nn = time(NULL);
e risolvi il problema
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 16:15   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ci sono libri e libri sulla generazione di sequenze pseudo-random. Con algoritmi fatti in casa, a meno che tu non sia un matematico (o qualcuno che ha studiato la materia), difficilmente riuscirai ad ottenere qualcosa di valido.
Ad esempio...la prima cosa che mi viene in mente è che quell'algoritmo possa essere convergente ad un determinato valore.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 17:34   #7
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Mmh ad occhio convergente direi di no, forse puoi avere problemi di periodicità visto che usi un and binario... In qualsiasi caso, come è stato già detto, per ottenere una sequenze pseudocasuale devi comunque partire da un seed generato casualmente (ad esempio mediante l'orologio di sistema), non puoi partire da una costante, pena riottenere ogni volta sempre la stessa sequenza
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 18:05   #8
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da santaclause83 Guarda i messaggi
la funzione rand() di c mi dà un problema anomalo se la inserisco in un determinato blocco del progetto
Che problema, e quale blocco?

Forse puoi trovare qualche idea QUI.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 18:19   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da yorkeiser Guarda i messaggi
Mmh ad occhio convergente direi di no, forse puoi avere problemi di periodicità visto che usi un and binario...
Prova ad avere nn == 0 Non è impossibile visto che nn viene da un and
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 22:00   #10
Perry_Rhodan
Member
 
L'Avatar di Perry_Rhodan
 
Iscritto dal: Jul 2005
Città: Canelli
Messaggi: 158
cerca l'algoritmo del marsenne twister o una libreria che lo implementi, è ritenuto uno degli algoritmi migliori per generare numeri pseudocasuali.

la funzione rand() lasciala perdere

http://random.mat.sbg.ac.at/generators/


se ti servono numeri casuali:

http://www.random.org/
Perry_Rhodan è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2007, 09:47   #11
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Quote:
Originariamente inviato da cionci Guarda i messaggi
Prova ad avere nn == 0 Non è impossibile visto che nn viene da un and
Effettivamente il dubbio c'era, ma in fondo non convergerebbe neanche lì: questi sono i primi 20 rand() generati a partire da un seed uguale a 0

Codice:
0.000000
0.000031
0.376782
0.225929
0.002564
0.646168
0.705527
0.463851
0.063723
0.632130
0.405347
0.854122
0.808496
0.582934
0.101260
0.021699
0.861843
0.123569
0.418287
0.591662
0.848781
Questo grazie al +1 nella formula, altrimenti effettivamente convergerebbe a 0.
Futili disquisizioni matematiche ovviamente
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2007, 11:03   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
In effetti
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2007, 12:04   #13
Lyane
Bannato
 
Iscritto dal: Jun 2007
Messaggi: 36
Prova questa:

Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define S1MAX 2147483562
#define S2MAX 2147483398

float Rand(void);
void Srand(void);

long s1,s2;

void main(void)

{
    int i;

    Srand();
    
    for(i=0;i<256;i++)
        printf("%7.2f\n",Rand());
}

void Srand(void)

{
    time_t t;

    s1=(unsigned)time(&t);
    s2=s1*s1;

    if(s1<1||s1>S1MAX)
	s1=(abs(s1)%S1MAX)+1;
    if(s2<1||s2>S2MAX)
	s2=(abs(s2)%S2MAX)+1;

}

float Rand()

{
    long Z,k;

    k=s1/53668;
    s1=40014*(s1-k*53668)-k*12211;
    if(s1<0)
	s1+=S1MAX+1;

    k=s2/52774;
    s2=40692*(s2-k*52774)-k*3791;
    if(s2<0)
	s2+=S2MAX+1;

    Z=s1-s2;
    if(Z<1)
	Z+=S1MAX;

    return(Z*4.656613E-10);
}
Lyane è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
iPhone 17 escluso dalle funzioni AI più ...
Rokarolla, il trojan Android che ruba cr...
Qwen-Robot Suite: la strategia di Alibab...
Threads raggiunge 500 milioni di utenti ...
Un chip nel cervello gli restituisce la ...
NVIDIA svela la tecnologia che trasforma...
iPhone del 20° anniversario e AirPods co...
Non solo Prime: ecco le 13 offerte su Am...
Xreal Aura apre le prenotazioni: gli occ...
Snap presenta i nuovi Specs: gli occhial...
Google rilascia Wear OS 7: basato su And...
Microsoft chiude la porta ai Surface da ...
Sedie gaming e da ufficio in offerta: a ...
Viltrox porta il suo 28mm f/4.5 pancake ...
Jensen Huang è andato a zappare l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v