Ciao,
come ti dice il messaggio dell'eccezione, il problema è legato al fatto che il risultato dell'operazione di divisione:
codice:
probabilita = BigDecimal.valueOf(1).divide(probabilita);
non ha una rappresentazione esatta con un numero decimale. Questo dipende dal particolare valore di probabilità; ad esempio con 2 non ti dà problemi, perché 1/2=0.5, mentre con 3 te li dà perché 1/3=0.33333... con infinite cifre decimali.
Per evitare l'eccezione devi specificare con che precisione vuoi ottenere il risultato quando effettui la divisione; se non la specifichi, di default è infinita e quindi hai l'eccezione. Nella classe MathContext sono definite delle costanti (DECIMAL128, DECIMAL64, DECIMAL32) che ti permettono di indicare la precisione voluta; ad esempio:
codice:
probabilita = BigDecimal.valueOf(1).divide(probabilita, MathContext.DECIMAL128);
Per il significato delle costanti puoi consultare il javadoc della classe MathContext.
Ciao,