mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Coverity dislikes (double) (int/int).
When you divide an int by an int and get a fraction and _then_ cast
to double, coverity assumes that you meant to cast to a double
first.
In my fix for -Wfloat-conversion in 493499a339
, I
did something like this that coverity didn't like.
Instead, I'm taking another approach here.
Fixes CID 1232089, I hope.
This commit is contained in:
parent
6a7d11f38a
commit
4c90cdc0e7
@ -2176,22 +2176,20 @@ scale_array_elements_to_u64(uint64_t *entries_out, const double *entries_in,
|
|||||||
double total = 0.0;
|
double total = 0.0;
|
||||||
double scale_factor = 0.0;
|
double scale_factor = 0.0;
|
||||||
int i;
|
int i;
|
||||||
/* big, but far away from overflowing an int64_t */
|
|
||||||
#define SCALE_TO_U64_MAX ((double) (INT64_MAX / 4))
|
|
||||||
|
|
||||||
for (i = 0; i < n_entries; ++i)
|
for (i = 0; i < n_entries; ++i)
|
||||||
total += entries_in[i];
|
total += entries_in[i];
|
||||||
|
|
||||||
if (total > 0.0)
|
if (total > 0.0) {
|
||||||
scale_factor = SCALE_TO_U64_MAX / total;
|
scale_factor = ((double)INT64_MAX) / total;
|
||||||
|
scale_factor /= 4.0; /* make sure we're very far away from overflowing */
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < n_entries; ++i)
|
for (i = 0; i < n_entries; ++i)
|
||||||
entries_out[i] = tor_llround(entries_in[i] * scale_factor);
|
entries_out[i] = tor_llround(entries_in[i] * scale_factor);
|
||||||
|
|
||||||
if (total_out)
|
if (total_out)
|
||||||
*total_out = (uint64_t) total;
|
*total_out = (uint64_t) total;
|
||||||
|
|
||||||
#undef SCALE_TO_U64_MAX
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Pick a random element of <b>n_entries</b>-element array <b>entries</b>,
|
/** Pick a random element of <b>n_entries</b>-element array <b>entries</b>,
|
||||||
|
Loading…
Reference in New Issue
Block a user