Add float error workarounds

This commit is contained in:
DarkPhoenix
2019-08-02 15:40:53 +03:00
parent fe9dc0a3e5
commit 9c7ad95f6e
3 changed files with 18 additions and 8 deletions

View File

@@ -18,6 +18,7 @@
# ===============================================================================
from eos.utils.float import floatUnerr
from utils.repr import makeReprStr
@@ -42,12 +43,14 @@ class DmgTypes:
def __eq__(self, other):
if not isinstance(other, DmgTypes):
return NotImplemented
return all((
self.em == other.em,
self.thermal == other.thermal,
self.kinetic == other.kinetic,
self.explosive == other.explosive,
self.total == other.total))
# Round for comparison's sake because often damage profiles are
# generated from data which includes float errors
return (
floatUnerr(self.em) == floatUnerr(other.em) and
floatUnerr(self.thermal) == floatUnerr(other.thermal) and
floatUnerr(self.kinetic) == floatUnerr(other.kinetic) and
floatUnerr(self.explosive) == floatUnerr(other.explosive) and
floatUnerr(self.total) == floatUnerr(other.total))
def __bool__(self):
return any((

View File

@@ -23,6 +23,7 @@ from functools import lru_cache
from eos.const import FittingHardpoint
from eos.saveddata.fit import Fit
from eos.utils.float import floatUnerr
from gui.builtinGraphs.fitDamageStats.helper import getTgtRadius
from service.const import GraphDpsDroneMode
from service.settings import GraphSettings
@@ -100,6 +101,9 @@ def getApplicationPerKey(fit, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAn
distance=distance,
tgtSpeed=tgtSpeed,
tgtSigRadius=tgtSigRadius)
# Ensure consistent results - round off a little to avoid float errors
for k, v in applicationMap.items():
applicationMap[k] = floatUnerr(v)
return applicationMap

View File

@@ -21,6 +21,7 @@
import math
from eos.saveddata.fit import Fit
from eos.utils.float import floatUnerr
from gui.builtinGraphs.fitDamageStats.helper import getTgtMaxVelocity, getTgtSigRadius
from service.const import GraphDpsDroneMode
from service.settings import GraphSettings
@@ -88,7 +89,8 @@ def getWebbedSpeed(fit, tgt, currentUnwebbedSpeed, webMods, webDrones, webFighte
mobileWebs.remove(mwData)
maxWebbedSpeed = getTgtMaxVelocity(tgt, extraMultipliers=appliedMultipliers)
currentWebbedSpeed = maxWebbedSpeed * speedRatio
return currentWebbedSpeed
# Ensure consistent results - round off a little to avoid float errors
return floatUnerr(currentWebbedSpeed)
def getTpMult(fit, tgt, tgtSpeed, tpMods, tpDrones, tpFighters, distance):
@@ -132,4 +134,5 @@ def getTpMult(fit, tgt, tgtSpeed, tpMods, tpDrones, tpFighters, distance):
if tpedSig == math.inf and untpedSig == math.inf:
return 1
mult = tpedSig / untpedSig
return mult
# Ensure consistent results - round off a little to avoid float errors
return floatUnerr(mult)