Save format string instead of float

This commit is contained in:
Jbleezy 2024-10-08 11:56:52 -07:00
parent e98fad73b9
commit cfb7c7ca78

View File

@ -384,17 +384,18 @@ namespace
const auto linear = static_cast<float>(value) / static_cast<float>(std::numeric_limits<uint16_t>::max()); const auto linear = static_cast<float>(value) / static_cast<float>(std::numeric_limits<uint16_t>::max());
const auto dbSpl = std::clamp(Common::LinearToDbspl(linear), 0.0f, 100.0f); const auto dbSpl = std::clamp(Common::LinearToDbspl(linear), 0.0f, 100.0f);
float dbSplRound; std::string dbSplFormat;
for (auto i = 0; i <= 4; i++) for (auto i = 0; i <= 4; i++)
{ {
dbSplRound = std::stof(std::format("{:.{}f}", dbSpl, i)); dbSplFormat = std::format("{:.{}f}", dbSpl, i);
const auto dbSplRound = std::stof(dbSplFormat);
const auto dbSplRoundToValue = static_cast<uint16_t>(Common::DbsplToLinear(dbSplRound) * static_cast<float>(std::numeric_limits<uint16_t>::max())); const auto dbSplRoundToValue = static_cast<uint16_t>(Common::DbsplToLinear(dbSplRound) * static_cast<float>(std::numeric_limits<uint16_t>::max()));
if (dbSplRoundToValue == value) if (dbSplRoundToValue == value)
break; break;
} }
stream.WriteColumn(std::format("{}", dbSplRound)); stream.WriteColumn(dbSplFormat);
} }
void WriteColumnPitchHertz(CsvOutputStream& stream, const uint16_t value) void WriteColumnPitchHertz(CsvOutputStream& stream, const uint16_t value)
@ -402,34 +403,36 @@ namespace
const auto hertz = static_cast<float>(value) / static_cast<float>(std::numeric_limits<int16_t>::max()); const auto hertz = static_cast<float>(value) / static_cast<float>(std::numeric_limits<int16_t>::max());
const auto cents = std::clamp(Common::HertzToCents(hertz), -2400.0f, 1200.0f); const auto cents = std::clamp(Common::HertzToCents(hertz), -2400.0f, 1200.0f);
float centsRound; std::string centsFormat;
for (auto i = 0; i <= 4; i++) for (auto i = 0; i <= 4; i++)
{ {
centsRound = std::stof(std::format("{:.{}f}", cents, i)); centsFormat = std::format("{:.{}f}", cents, i);
const auto centsRound = std::stof(centsFormat);
const auto centsRoundToValue = static_cast<uint16_t>(Common::CentsToHertz(centsRound) * static_cast<float>(std::numeric_limits<int16_t>::max())); const auto centsRoundToValue = static_cast<uint16_t>(Common::CentsToHertz(centsRound) * static_cast<float>(std::numeric_limits<int16_t>::max()));
if (centsRoundToValue == value) if (centsRoundToValue == value)
break; break;
} }
stream.WriteColumn(std::format("{}", centsRound)); stream.WriteColumn(centsFormat);
} }
void WriteColumnNormByte(CsvOutputStream& stream, const uint8_t value) void WriteColumnNormByte(CsvOutputStream& stream, const uint8_t value)
{ {
const auto normValue = static_cast<float>(value) / static_cast<float>(std::numeric_limits<uint8_t>::max()); const auto normValue = static_cast<float>(value) / static_cast<float>(std::numeric_limits<uint8_t>::max());
float normValueRound; std::string normValueFormat;
for (auto i = 0; i <= 4; i++) for (auto i = 0; i <= 4; i++)
{ {
normValueRound = std::stof(std::format("{:.{}f}", normValue, i)); normValueFormat = std::format("{:.{}f}", normValue, i);
const auto normValueRound = std::stof(normValueFormat);
const auto normValueRoundToValue = static_cast<uint8_t>(normValueRound * static_cast<float>(std::numeric_limits<uint8_t>::max())); const auto normValueRoundToValue = static_cast<uint8_t>(normValueRound * static_cast<float>(std::numeric_limits<uint8_t>::max()));
if (normValueRoundToValue == value) if (normValueRoundToValue == value)
break; break;
} }
stream.WriteColumn(std::format("{}", normValueRound)); stream.WriteColumn(normValueFormat);
} }
void WriteColumnWithKnownHashes(CsvOutputStream& stream, const std::unordered_map<unsigned, std::string>& knownValues, const unsigned value) void WriteColumnWithKnownHashes(CsvOutputStream& stream, const std::unordered_map<unsigned, std::string>& knownValues, const unsigned value)