src/share/stockfish/src/types.h
inline Value eg_value(Score s) {

  union { uint16_t u; int16_t s; } eg = { uint16_t(unsigned(s + 0x8000) >> 16) };
  return Value(eg.s);
}
/// Extracting the signed lower and upper 16 bits is not so trivial because
/// according to the standard a simple cast to short is implementation defined
/// and so is a right shift of a signed integer.
Extracting the signed lower and upper 16 bits is not so trivial because
according to the standard a simple cast to short is implementation defined
and so is a right shift of a signed integer.
Extracting the signed lower and upper 16 bits is not so trivial because according to the standard a simple cast to short is implementation defined and so is a right shift of a signed integer .
inline Value eg_value(Score s) {
  union { uint16_t u; int16_t s; } eg = { uint16_t(unsigned(s + 0x8000) >> 16) };
  return Value(eg.s);
}
inline Value eg_value ( Score s ) { union { uint16_t u ; int16_t s ; } eg = { uint16_t ( unsigned ( s + 0x8000 ) >> 16 ) } ; return Value ( eg . s ) ; }
Extracting the signed lower and upper 16 bits is not so trivial because
according to the standard a simple cast to short is implementation defined
and so is a right shift of a signed integer.
Extracting the signed lower and upper 16 bits is not so trivial because according to the standard a simple cast to short is implementation defined and so is a right shift of a signed integer .