Bonjour,
Voilà mon problème. Je vous explique le contexte, pour que vous compreniez à peu près ce que fait mon code, mais mon problème est purement "informatique" (ce ne sont pas les calculs qui posent problème).
J'ai défini un type "obligation" :
puis une fonction "prixObligation(obligation, taux)" permettant de calculer le prix de l'obligation en fonction d'un taux de rendement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Public Structure Obligation Dim Maturity As Double Dim Coupon As Double Dim Price As Double End Structure
Vient maintenant mon problème. J'ai créé cette fonction récursive :
J'appelle cette fonction dans une autre procédure ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Function tauxActuarielMethodeFaussePosition(ByVal obli As Obligation, ByVal tauxA As Double, ByVal tauxB As Double) As Double Dim epsilon As Double = 10 ^ (-4) Dim valeurA As Double = prixObligation(obli, tauxA) - obli.Price Dim valeurB As Double = prixObligation(obli, tauxB) - obli.Price Dim tauxC As Double = tauxA - valeurA * (tauxB - tauxA) / (valeurB - valeurA) If (Math.Abs(tauxB - tauxA) > epsilon) Then Dim valeurC As Double = prixObligation(obli, tauxC) - obli.Price If ((valeurA * valeurC) < 0) Then tauxActuarielMethodeFaussePosition(obli, tauxA, tauxC) Else tauxActuarielMethodeFaussePosition(obli, tauxC, tauxB) End If Else DataRead.Text = tauxC.ToString() Return tauxC End If End Function
Le résultat obtenu sur mon label "DataRead" est "1.89" (ce qui exactement ce que j'attends). Mais le label "DataRead2" m'affiche "0" !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim aux As Double = tauxActuarielMethodeFaussePosition(obli, 0, 100) DataRead2.Text = aux.ToString()
Pourquoi donc ?
J'ai passé plusieurs heures à tout décortiquer pour savoir d'où ça vient, et je ne trouve toujours pas ! Pouvez-vous m'aider ?
Partager