2017-09-19 1 views
0

J'essaie de résoudre la question de "Can x * (1/x) jamais être 1 quand x est un nombre aléatoire à virgule flottante entre [1,2]" et j'essaie de générer des nombres flottants aléatoires dans Julia pour tester les hypothèses. J'ai essayé de faireGénérer des points de flottement aléatoires dans Julia

BigFloat(rand(1,2)), as well as Float64(1,2) 

en vain. Toute aide est appréciée

+3

Première aide est de prendre une nuit et lire: https://docs.julialang.org/en/stable/. Essayez aussi 'rand (Float64) + 1.0' devrait être assez uniforme entre 1.0 et 2.0 (il y a la question délicate de l'uniformité que vous voulez: sur les nombres flottants, ou sur les réels). –

+0

Est-ce que ce sont les devoirs? –

+1

@DanGetz dat question délicate tho. +1 –

Répondre

1

Les réponses est oui

for i=1:100 
    x = rand() + 1.0; 
    xi = 1.0/x 
    y = x * xi 
    if y != 1.0 
     println("case ", i, " x*(1/x) != 1 for x=", x, " diff= ", y - 1.0) 
    end 
end 


case 18 x*(1/x) != 1 for x=1.3193289816663771 diff= -1.1102230246251565e-16 
case 26 x*(1/x) != 1 for x=1.9692333690500858 diff= -1.1102230246251565e-16 
case 42 x*(1/x) != 1 for x=1.8927527081187694 diff= -1.1102230246251565e-16  
... 

Conscient cela est dû à la précision limitée des flotteurs (doubles). Ce n'est pas vrai dans un sens mathématique.