1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Fix float comparisons

Replace this "==" with a more tolerant comparison operation.
Floating point numbers should not be tested for equality cpp:S1244
This commit is contained in:
Alexander Wilms 2024-02-14 23:30:29 +01:00
parent 110ef5f66e
commit 2ea78a5883
4 changed files with 5 additions and 5 deletions

View File

@ -1265,8 +1265,8 @@ bool AINodeStorage::hasBetterChain(
&& nodeActor->heroFightingStrength >= candidateActor->heroFightingStrength
&& node.getCost() <= candidateNode->getCost())
{
if(nodeActor->heroFightingStrength == candidateActor->heroFightingStrength
&& node.getCost() == candidateNode->getCost()
if(vstd::isAlmostEqual(nodeActor->heroFightingStrength, candidateActor->heroFightingStrength)
&& vstd::isAlmostEqual(node.getCost(), candidateNode->getCost())
&& &node < candidateNode)
{
continue;

View File

@ -232,7 +232,7 @@ namespace
std::string multipleOfCheck(Validation::ValidationData & validator, const JsonNode & baseSchema, const JsonNode & schema, const JsonNode & data)
{
double result = data.Float() / schema.Float();
if (floor(result) != result)
if (!vstd::isAlmostEqual(floor(result), result))
return validator.makeErrorMessage((boost::format("Value is not divisible by %d") % schema.Float()).str());
return "";
}

View File

@ -102,7 +102,7 @@ struct DLL_LINKAGE CGPathNode
STRONG_INLINE
void setCost(float value)
{
if(value == cost)
if(vstd::isAlmostEqual(value, cost))
return;
bool getUpNode = value < cost;

View File

@ -35,7 +35,7 @@ void JsonSerializer::serializeInternal(const std::string & fieldName, si32 & val
void JsonSerializer::serializeInternal(const std::string & fieldName, double & value, const std::optional<double> & defaultValue)
{
if(!defaultValue || defaultValue.value() != value)
if(!defaultValue || !vstd::isAlmostEqual(defaultValue.value(), value))
currentObject->operator[](fieldName).Float() = value;
}