From 79a4100777d99c00e983ee78b4539acc349bd148 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Sat, 4 Nov 2017 13:01:18 +0300 Subject: Don't use force difference for pseudo-4op voices in GenAdlData --- utils/gen_adldata/progs_cache.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index d652b9e..96dfe32 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -9,6 +9,8 @@ #include #include #include +#include +#include struct insdata { @@ -37,6 +39,13 @@ struct insdata } }; +inline bool equal_approx(double const a, double const b) +{ + double const epsilon(std::numeric_limits::epsilon() * 100); + double const scale(1.0); + return std::fabs(a - b) < epsilon * (scale + (std::max)(std::fabs(a), std::fabs(b))); +} + struct ins { size_t insno1, insno2; @@ -50,7 +59,7 @@ struct ins && insno1 == b.insno1 && insno2 == b.insno2 && pseudo4op == b.pseudo4op - && voice2_fine_tune == b.voice2_fine_tune; + && equal_approx(voice2_fine_tune, b.voice2_fine_tune); } bool operator< (const ins &b) const { @@ -58,7 +67,7 @@ struct ins if(insno2 != b.insno2) return insno2 < b.insno2; if(notenum != b.notenum) return notenum < b.notenum; if(pseudo4op != b.pseudo4op) return pseudo4op < b.pseudo4op; - if(voice2_fine_tune != b.voice2_fine_tune) return voice2_fine_tune < b.voice2_fine_tune; + if(!equal_approx(voice2_fine_tune, b.voice2_fine_tune)) return voice2_fine_tune < b.voice2_fine_tune; return 0; } bool operator!=(const ins &b) const -- cgit v1.2.3