mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Fix DIVIDE BY ZERO exception in init_search()
It happens that when d == 0 we calculate: log(double(0 * 0) / 2) Unfortunately, log(0) is "illegal" and can generate either a floating point exception or return a nonsense "huge" value depending on the platform. This fixs in the proper way the GCC/ICC rounding difference, bug was from our side, not in the intel compiler. Also fixed some few other warnings. Bug spotted by Richard Lloyd. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
3578207974
commit
1d4e7bbdf5
4 changed files with 6 additions and 6 deletions
|
@ -894,7 +894,7 @@ namespace {
|
||||||
Square s = pop_1st_bit(&b);
|
Square s = pop_1st_bit(&b);
|
||||||
Square queeningSquare = relative_square(c, make_square(square_file(s), RANK_8));
|
Square queeningSquare = relative_square(c, make_square(square_file(s), RANK_8));
|
||||||
int d = square_distance(s, queeningSquare)
|
int d = square_distance(s, queeningSquare)
|
||||||
- (relative_rank(c, s) == RANK_2) // Double pawn push
|
- int(relative_rank(c, s) == RANK_2) // Double pawn push
|
||||||
- square_distance(pos.king_square(opposite_color(c)), queeningSquare)
|
- square_distance(pos.king_square(opposite_color(c)), queeningSquare)
|
||||||
+ int(c != pos.side_to_move());
|
+ int(c != pos.side_to_move());
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ Phase MaterialInfoTable::game_phase(const Position& pos) {
|
||||||
MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) {
|
MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) {
|
||||||
|
|
||||||
Key key = pos.get_material_key();
|
Key key = pos.get_material_key();
|
||||||
int index = key & (size - 1);
|
unsigned index = unsigned(key & (size - 1));
|
||||||
MaterialInfo* mi = entries + index;
|
MaterialInfo* mi = entries + index;
|
||||||
|
|
||||||
// If mi->key matches the position's material hash key, it means that we
|
// If mi->key matches the position's material hash key, it means that we
|
||||||
|
|
|
@ -148,7 +148,7 @@ PawnInfo* PawnInfoTable::get_pawn_info(const Position& pos) const {
|
||||||
assert(pos.is_ok());
|
assert(pos.is_ok());
|
||||||
|
|
||||||
Key key = pos.get_pawn_key();
|
Key key = pos.get_pawn_key();
|
||||||
int index = int(key & (size - 1));
|
unsigned index = unsigned(key & (size - 1));
|
||||||
PawnInfo* pi = entries + index;
|
PawnInfo* pi = entries + index;
|
||||||
|
|
||||||
// If pi->key matches the position's pawn hash key, it means that we
|
// If pi->key matches the position's pawn hash key, it means that we
|
||||||
|
|
|
@ -214,7 +214,7 @@ namespace {
|
||||||
int32_t FutilityMarginsMatrix[16][64]; // [depth][moveNumber]
|
int32_t FutilityMarginsMatrix[16][64]; // [depth][moveNumber]
|
||||||
int FutilityMoveCountArray[32]; // [depth]
|
int FutilityMoveCountArray[32]; // [depth]
|
||||||
|
|
||||||
inline Value futility_margin(Depth d, int mn) { return Value(d < 7 * OnePly ? FutilityMarginsMatrix[Max(d, 0)][Min(mn, 63)] : 2 * VALUE_INFINITE); }
|
inline Value futility_margin(Depth d, int mn) { return Value(d < 7 * OnePly ? FutilityMarginsMatrix[Max(d, 1)][Min(mn, 63)] : 2 * VALUE_INFINITE); }
|
||||||
inline int futility_move_count(Depth d) { return d < 16 * OnePly ? FutilityMoveCountArray[d] : 512; }
|
inline int futility_move_count(Depth d) { return d < 16 * OnePly ? FutilityMoveCountArray[d] : 512; }
|
||||||
|
|
||||||
// Step 14. Reduced search
|
// Step 14. Reduced search
|
||||||
|
@ -353,8 +353,8 @@ void init_search() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init futility margins array
|
// Init futility margins array
|
||||||
for (d = 0; d < 16; d++) for (mc = 0; mc < 64; mc++)
|
for (d = 1; d < 16; d++) for (mc = 0; mc < 64; mc++)
|
||||||
FutilityMarginsMatrix[d][mc] = 112 * int(log(double(d * d) / 2) / log(2.0) + 1.001) - 8 * mc + 45;
|
FutilityMarginsMatrix[d][mc] = 112 * int(log(double(d * d) / 2) / log(2.0) + 1) - 8 * mc + 45;
|
||||||
|
|
||||||
// Init futility move count array
|
// Init futility move count array
|
||||||
for (d = 0; d < 32; d++)
|
for (d = 0; d < 32; d++)
|
||||||
|
|
Loading…
Add table
Reference in a new issue