2013-05-05 6 views
2

Je dois générer un nombre aléatoire compris entre .0000001 et 1, j'ai utilisé rand (1) mais cela ne me donne que 4 points décimaux, existe-t-il un autre moyen de faire cette génération?Nombre aléatoire en octave

Merci!

+0

Etes-vous sûr que 4 points décimaux est la précision réelle et il n'arrondit pas pendant l'affichage? –

Répondre

4

De l'Octave docs:

Par défaut, Octave affiche 5 chiffres significatifs sous une forme lisible par l'homme (option « courte » jumelé avec le format « lâche » pour les matrices).

Il est probablement un problème avec la façon dont vous êtes impression la valeur plutôt que la valeur elle-même.

Cette même page affiche les autres formats de sortie en plus de short, celui que vous pouvez regarder est long, donnant 15 chiffres significatifs.

Et il y a aussi la output_precision qui peut être défini comme par here:

old_val = output_precision (7) 
disp (whatever) 
old_val = output_precision (old_val) 
0

Réglez le output_precision à 7 et il devrait être ok :)

0

Réglage de la précision de sortie ne sera pas utile si car le nombre peut toujours être inférieur à .0000001 en théorie mais vous n'afficherez que les 7 premiers chiffres. La façon la plus simple:

req=0; 
while (req<.0000001) 
req=rand(1); 
end 

Il est possible que cela pourrait vous rester coincé dans une boucle, mais il produira le bon numéro. Pour afficher toutes les décimales, vous pouvez également utiliser la commande suivante:

format long 

Cela va vous montrer 15 décimales. Pour revenir en arrière allez:

formay short