mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Fix some 'possible loss of data' warnings
Patch by Maxim Masiutin closes https://github.com/official-stockfish/Stockfish/pull/4440 No functional change
This commit is contained in:
parent
46756996e7
commit
a9a0dbbcd0
2 changed files with 13 additions and 7 deletions
|
@ -375,7 +375,7 @@ void dbg_print() {
|
|||
for (int i = 0; i < MaxDebugSlots; ++i)
|
||||
if ((n = stdev[i][0]))
|
||||
{
|
||||
double r = sqrtl(E(stdev[i][2]) - sqr(E(stdev[i][1])));
|
||||
double r = sqrt(E(stdev[i][2]) - sqr(E(stdev[i][1])));
|
||||
std::cerr << "Stdev #" << i
|
||||
<< ": Total " << n << " Stdev " << r
|
||||
<< std::endl;
|
||||
|
@ -385,8 +385,8 @@ void dbg_print() {
|
|||
if ((n = correl[i][0]))
|
||||
{
|
||||
double r = (E(correl[i][5]) - E(correl[i][1]) * E(correl[i][3]))
|
||||
/ ( sqrtl(E(correl[i][2]) - sqr(E(correl[i][1])))
|
||||
* sqrtl(E(correl[i][4]) - sqr(E(correl[i][3]))));
|
||||
/ ( sqrt(E(correl[i][2]) - sqr(E(correl[i][1])))
|
||||
* sqrt(E(correl[i][4]) - sqr(E(correl[i][3]))));
|
||||
std::cerr << "Correl. #" << i
|
||||
<< ": Total " << n << " Coefficient " << r
|
||||
<< std::endl;
|
||||
|
|
|
@ -995,13 +995,19 @@ uint8_t* set_sizes(PairsData* d, uint8_t* data) {
|
|||
d->lowestSym = (Sym*)data;
|
||||
d->base64.resize(d->maxSymLen - d->minSymLen + 1);
|
||||
|
||||
// See https://en.wikipedia.org/wiki/Huffman_coding
|
||||
// The canonical code is ordered such that longer symbols (in terms of
|
||||
// the number of bits of their Huffman code) have lower numeric value,
|
||||
// so that d->lowestSym[i] >= d->lowestSym[i+1] (when read as LittleEndian).
|
||||
// Starting from this we compute a base64[] table indexed by symbol length
|
||||
// and containing 64 bit values so that d->base64[i] >= d->base64[i+1].
|
||||
// See https://en.wikipedia.org/wiki/Huffman_coding
|
||||
for (int i = d->base64.size() - 2; i >= 0; --i) {
|
||||
|
||||
// Implementation note: we first cast the unsigned size_t "base64.size()"
|
||||
// to a signed int "base64_size" variable and then we are able to subtract 2,
|
||||
// avoiding unsigned overflow warnings.
|
||||
|
||||
int base64_size = static_cast<int>(d->base64.size());
|
||||
for (int i = base64_size - 2; i >= 0; --i) {
|
||||
d->base64[i] = (d->base64[i + 1] + number<Sym, LittleEndian>(&d->lowestSym[i])
|
||||
- number<Sym, LittleEndian>(&d->lowestSym[i + 1])) / 2;
|
||||
|
||||
|
@ -1012,10 +1018,10 @@ uint8_t* set_sizes(PairsData* d, uint8_t* data) {
|
|||
// than d->base64[i+1] and given the above assert condition, we ensure that
|
||||
// d->base64[i] >= d->base64[i+1]. Moreover for any symbol s64 of length i
|
||||
// and right-padded to 64 bits holds d->base64[i-1] >= s64 >= d->base64[i].
|
||||
for (size_t i = 0; i < d->base64.size(); ++i)
|
||||
for (int i = 0; i < base64_size; ++i)
|
||||
d->base64[i] <<= 64 - i - d->minSymLen; // Right-padding to 64 bits
|
||||
|
||||
data += d->base64.size() * sizeof(Sym);
|
||||
data += base64_size * sizeof(Sym);
|
||||
d->symlen.resize(number<uint16_t, LittleEndian>(data)); data += sizeof(uint16_t);
|
||||
d->btree = (LR*)data;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue