2017-11-07 11 views
1
Probability = 0.52; 
SharePrice = 215; 
n = 10000; 
count = 0; 
count250 = 0; 
count200 = 0; 

for i = 1:n 
    CoinToss = rand(1); 
    if (SharePrice == 200) 
     break; 
    end 
    if (SharePrice == 250)  
     break; 
    end 
    if(Probability < CoinToss) 
     SharePrice = SharePrice - 0.2;   
    else 
     SharePrice = SharePrice + 0.2;   
    end 
end 

コードは、私が与えた境界(200と250)を超えているように見えますが、なぜそれは止まらないのですか?Breakステートメントが実行されない

+0

を単純な答えを持っている必要があります。 – James

+2

浮動小数点演算へようこそ。実験として、 '(215-0.2)==(214.6 + 0.2)'を試してください。あなたは彼らが平等ではないことがわかります。 '215-0.2'を小数点以下の桁まで印字すると、' fprintf( '%。17g \ n'、215-0.2) 'が' 214.80000000000001'となります。 – beaker

答えて

0

浮動小数点の不正確さへようこそ。 SharePriceはおそらく200まで加算されないため、SharePrice == 200の条件が満たされなくなります(同じことがSharePrice == 250になります)。 SharePriceが200を下回るか、250を超える場合

あなたは蚊帳の外INGのbreakを検討する必要があります。私はこのように感じる

if (SharePrice <= 200) 
    break 
end 
if (SharePrice >= 250)  
    break 
end 
+1

これは不正確につながります。毎回 '215 'を' 0.2'ずつ減分すると、正しい75回の反復ではなく、 'SharePrice <= 200'より76回反復されます。 – beaker

+0

問題を解決する正しい方法は何ですか? – James

+0

@Jamesリンクされたdupeターゲットを読み取る –

関連する問題