yawnoc/sfta

Computed value dependent on event declaration order

Closed this issue · 0 comments

  • Version: v0.2.5 (24d0017)
  • Input ft.txt:
    Event: A    
    - probability: 0.1
    
    Event: B    
    - probability: 0.3
    
    Event: C    
    - probability: 0.5
    
    Event: D    
    - probability: 0.823
    
    Event: DDD   
    - probability: 0.823
    
    Event: CCC   
    - probability: 0.5
    
    Event: BBB   
    - probability: 0.3
    
    Event: AAA   
    - probability: 0.1
    
    Gate: Ascending
    - type: AND
    - inputs: A, B, C, D
    
    Gate: Descending
    - type: AND
    - inputs: AAA, BBB, CCC, DDD
    
    Gate: Top
    - type: OR
    - inputs: Ascending, Descending
  • Output ft.txt.out/cut-sets/Top.tsv:
    quantity_type	quantity_value	quantity_unit	cut_set
    probability	0.01235	1	DDD.CCC.BBB.AAA
    probability	0.01234	1	A.B.C.D
  • Expected behaviour: cut sets DDD.CCC.BBB.AAA and A.B.C.D have equal probability
  • Observed behaviour: cut sets DDD.CCC.BBB.AAA and A.B.C.D have unequal probability (0.01234 ≠ 0.01235)

The observed unequal probability appears to be caused by the floating point multiplication being performed in the order that the underlying events are declared:

>>> # A.B.C.D
>>> 0.1 * 0.3 * 0.5 * 0.823
0.012344999999999998

>>> # DDD.CCC.BBB.AAA
>>> 0.823 * 0.5 * 0.3 * 0.1
0.012345