Questo problema sembrava qualcosa che dovrebbe essere risolvibile con poche righe di codice.
Sfortunatamente, una volta che ho iniziato a scrivere la cosa, ho realizzato che non è così semplice come sembra.
Quello di cui ho bisogno è un insieme di X numeri casuali, ognuno dei quali è tra A e B e tutti si sommano a X. Le variabili esatte per il problema che sto affrontando sembrano essere ancora più semplici: ho bisogno di 5 numeri , tra -1 e 1 (nota: questi sono numeri razionali (in virgola mobile), che si sommano fino a 1.
Il mio approccio iniziale "poche linee di codice, dovrebbe essere facile" era quello di randomizzare 4 numeri tra -1 e 1 (che è abbastanza semplice), e quindi rendere l'ultimo 1-(sum of previous numbers)
. Ciò si è rivelato rapidamente sbagliato, in quanto l'ultimo numero potrebbe anche essere maggiore di 1 o inferiore a -1.
Quale sarebbe il modo migliore per affrontare questo problema?
PS. Solo per riferimento: sto usando C #, ma non penso che importi. In realtà sto avendo problemi a creare una soluzione abbastanza buona per il problema nella mia testa.
Volevo anche fornire la mia attuale soluzione al problema, ma ricordati che è abbastanza imperfetto ed è stato creato come una soluzione rapida al problema iniziale !
- Genera 4 numeri casuali tra -1 e 1
- Crea un numero "finale"
X=SUM(previousNumbers)
- Se il numero finale è > 1 o < -1, quindi:
- Ottieni "importo" su 1 / meno di -1 e imposta l'ultimo numero a 1 / -1
- trova un altro numero che può accettare questo importo e ancora tra parentesi
- Se nessun numero può prendere l'importo (è troppo grande / troppo piccolo), dividi l'importo a metà e riprova per ogni metà
- Randomizza l'ordine dei numeri generati e li restituisce
Funziona nel senso che questo algoritmo genera 5 numeri tra -1 e 1 e la loro somma è 1. Tuttavia il lato negativo è che molto spesso uno dei numeri generati è un 1 (o -1), che non fa Mi sento molto casuale.