[Coin-lpsolver] Variable definitions in coinlpio()

Vishnu Erramilli vishnu.erramilli at optessa.com
Fri Nov 10 13:16:31 EST 2006


Hi,

Thanks for replying to my previous queries. I am able to run CBC using
files formatted according to specs given in the coinlp() class. I needed
some clarification regarding variable defintions in this format:

1) What is the difference between a general and integer? If they are the
same then can they be used interchangeably in all circumstances or is one
preferred to another?

2) I just wanted to confirm that we do not need to explcitly define linear
variables?

I look forward to the replies.

Thanks,

Vishnu




> Lou Hafer wrote:
>> Vishnu,
> <stripped >
>
>> in full exploration of an unproductive portion of the search tree.  To
>> coin an
>> oxymoron, there's a sort of deterministic randomness.  The behaviour is
>> repeatable on a given platform, but will vary (apparently randomly)
>> between
>> platorms.
>
> <stripped>
>
> On x86-32 platforms, the FPU has 80 bits-wide registers
> (with a 64 bits mantissa), which is different from the memory format
> (64 bits with 53 bits mantissa ,including 1 implicit bit)
>
>   In Linux, the default settings of the FPU rounding mode is to keep the
> full 80 bits for the results of operations between registers, while in
> Windows, the FPU rounding mode is set to keep only 64 bits (ie round
> mantissa to 53 bits  and setting the low 11 bits (of the 80) to 0).
> Storing to memory of course always round things from 80 bits to 64 bits.
>
> So the operations involving only register variables are made with
> greater precision on Linux than on Windows (or than on any hardware
> platform that has pure 64 bits precision -- sparcs, etc...) and that
> makes things diverge quite quickly on codes like (MI)LP.
>
> In my experience, LP codes run better with the linux settings.
>
> Note that setting the FPU rounding mode to 64 bits under Linux will
> note guarantee complete reproducibility with a pure 64 bits platform,
> because the exponent inside the 80-bits register is still 16 bits wide
> instead of 11 bits for a standard 64 bits proc. So very tiny numbers
> can be zero on one platform and non-zero on others, which can
> change the results of some tests.
>
> And different compilers can also reorganize differently arithmetic
> expressions at some levels of optimization ...
>
> Gilles
>
> _______________________________________________
> Coin-lpsolver mailing list
> Coin-lpsolver at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/coin-lpsolver
>




More information about the Clp mailing list