Rounding mode switching side-effects
- Lenguaje dominante
- C++
- Estrellas
- 335
- Forks
- 88
- Merge medio
- 1 h 28 min
- PR fusionados (30 d)
- 1
Descripción
When running a model involving FloatVars, the FPU rouding mode may get changed, which may cause issues with code running afterwards. This happens with Gecode 6.2.0 (I haven't checked whether this changed in 6.3 yet).
I'm not certain which platforms this applies to, but it certainly happened to me on Linux x64 and, in the past, on Windows (I wasn't able to reproduce this now).
I created the following simple "guard class" to work around this problem.
```
struct SaveRoundingState {
Gecode::Float::Rounding::rounding_mode original_rt;
SaveRoundingState() {
Gecode::Float::Rounding::get_rounding_mode(original_rt);
}
~SaveRoundingState() {
Gecode::Float::Rounding::set_rounding_mode(original_rt);
}
};
```
Using this as follows resolves the issue (including printouts of the rounding mode):
```
{
Gecode::Float::Rounding::rounding_mode rm;
Gecode::Float::Rounding::get_rounding_mode(rm);
std::cout << rm << "\n";
{
SaveRoundingState save_state;
// (run the solver)
}
Gecode::Float::Rounding::get_rounding_mode(rm);
std::cout << rm << "\n";
}
```
In any case I think that Gecode should be cleaning up by itself.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Evaluación
Este issue todavía no se ha evaluado.