add truncPrec to truncate precision of doubles, use it to reduce needless waste in svs.json. This appears to make svs.json 10% smaller.

Closes #84.
pull/90/head
bert hubert 2020-01-18 16:48:22 +01:00
parent 32d6574de1
commit 3426271cf5
5 changed files with 35 additions and 12 deletions

View File

@ -72,7 +72,7 @@ navmon.pb.cc: navmon.proto
ubxtool: navmon.pb.o ubxtool.o ubx.o bits.o ext/fmt-5.2.1/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o $(SIMPLESOCKETS) osen.o githash.o
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -pthread
testrunner: navmon.pb.o testrunner.o ubx.o bits.o ext/fmt-5.2.1/src/format.o galileo.o gps.o beidou.o ephemeris.o sp3.o osen.o
testrunner: navmon.pb.o testrunner.o ubx.o bits.o ext/fmt-5.2.1/src/format.o galileo.o gps.o beidou.o ephemeris.o sp3.o osen.o navmon.o
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf
check: testrunner

View File

@ -152,3 +152,13 @@ std::string humanTime(time_t t, uint32_t nanoseconds)
strftime(buffer, sizeof(buffer), fmt.c_str(), &tm);
return buffer;
}
// truncate to x digits precision, see testrunner.cc for details
double truncPrec(double in, unsigned int digits)
{
double partial = in - trunc(in);
int factor=1;
for(; digits ; --digits)
factor *= 10;
return trunc(in) + round(partial * factor) / factor;
}

View File

@ -49,3 +49,5 @@ private:
std::mutex d_lock;
};
double truncPrec(double in, unsigned int digits);

View File

@ -785,10 +785,10 @@ try
Point sat;
if((sv.first.gnss == 0 || sv.first.gnss == 2) && sv.second.completeIOD()) {
svo["delta_hz"] = iter->second.deltaHz;
svo["delta_hz"] = truncPrec(iter->second.deltaHz, 2);
auto hzCorrection = getHzCorrection(time(0), src.first , sv.first.gnss, sv.first.sigid, svstats);
if(hzCorrection)
svo["delta_hz_corr"] = iter->second.deltaHz - *hzCorrection;
svo["delta_hz_corr"] = truncPrec(iter->second.deltaHz - *hzCorrection, 2);
getCoordinates(latestTow(sv.first.gnss, svstats), sv.second.liveIOD(), & sat);
}
@ -804,9 +804,7 @@ try
svo["azi"] = roundf(10.0*getAzimuthDeg(sat, our))/10.0;
}
svo["prres"] = iter->second.prres;
svo["prres"] = truncPrec(iter->second.prres, 2);
svo["qi"] = iter->second.qi;
svo["used"] = iter->second.used;
svo["age-s"] = time(0) - iter->second.t;
@ -965,7 +963,7 @@ try
recv["db"] = perrecv.second.db;
recv["qi"] = perrecv.second.qi;
recv["used"] = perrecv.second.used;
recv["prres"] = perrecv.second.prres;
recv["prres"] = truncPrec(perrecv.second.prres, 2);
recv["elev"] = perrecv.second.el;
recv["last-seen-s"] = time(0) - perrecv.second.t;
recvs[std::to_string(perrecv.first)] = recv;
@ -1152,7 +1150,7 @@ try
if(auto iter = beidoualma.find(s.first.sv); iter != beidoualma.end()) {
Point almapos;
getCoordinates(s.second.tow, iter->second.alma, &almapos);
item["alma-dist"] = Vector(almapos, p).length()/1000.0;
item["alma-dist"] = truncPrec(Vector(almapos, p).length()/1000.0, 1);
}
}
}
@ -1171,7 +1169,7 @@ try
item["eph-age-m"] = ephAge(s.second.tow, getGlonassT0e(pseudoTow, s.second.glonassMessage.Tb))/60.0;
if(s.second.tleMatch.distance >=0) {
item["best-tle"] = s.second.tleMatch.name;
item["best-tle-dist"] = s.second.tleMatch.distance /1000.0;
item["best-tle-dist"] = truncPrec(s.second.tleMatch.distance /1000.0, 1);
item["best-tle-norad"] = s.second.tleMatch.norad;
item["best-tle-int-desig"] = s.second.tleMatch.internat;
}
@ -1328,7 +1326,7 @@ try
det["db"] = pr.second.db;
det["last-seen-s"] = time(0) - pr.second.t;
det["prres"] = pr.second.prres;
det["prres"] = truncPrec(pr.second.prres, 2);
det["qi"] = pr.second.qi;
det["used"] = pr.second.used;
@ -1348,11 +1346,11 @@ try
item["last-seen-s"] = time(0) - nanoTime(s.first.gnss, s.second.wn, s.second.tow)/1000000000;
if(s.second.latestDisco >=0) {
item["latest-disco"]= s.second.latestDisco;
item["latest-disco"]= truncPrec(s.second.latestDisco, 3);
item["latest-disco-age"]= s.second.latestDiscoAge;
}
if(s.second.timeDisco > -100 && s.second.timeDisco < 100) {
item["time-disco"]= s.second.timeDisco;
item["time-disco"]= truncPrec(s.second.timeDisco, 1);
}

View File

@ -2,6 +2,7 @@
#include "ext/doctest.h"
#include "ephemeris.hh"
#include "navmon.hh"
TEST_CASE("testing ephemeris age") {
CHECK(ephAge(0,0) == 0);
@ -36,3 +37,15 @@ TEST_CASE("sp3") {
CHECK(e.clockBias == 1000.0 * -306.607761);
}
TEST_CASE("truncation") {
CHECK(truncPrec(123.0, 0) == 123.0);
CHECK(truncPrec(123.123, 1) == 123.1);
CHECK(truncPrec(123.123, 2) == 123.12);
CHECK(truncPrec(123.123, 3) == 123.123);
CHECK(truncPrec(123.191, 1) == 123.2);
CHECK(truncPrec(123.191, 2) == 123.19);
CHECK(truncPrec(123.999, 0) == 124.0);
}