<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Understood. I put that back -- depending on C compiler flags,<br>LONG_MIN / -1 will either be LONG_MIN or trap.<br>Trap seems reasonable.<br>Though Modula-3 might mandate the consistent LONG_MIN?<br>Or leave it implementation defined?<br><br><br>The real bugs here were:<br>  LONG_MIN / negative (other than -1) was returning positive <br>  possibly long long problem with K&R style, I'm pretty sure <br>  possibly slightly fragile code wrt signed overflow. <br><br><br>   funny thing is though, the reason I went looking into this<br>   was because mailing list threads lead me to believe my<br>   functions that are meant to look for overflow might be<br>   broken by the optimizer; it doesn't seem to notice them <br>   but the funny stuff m3_div was doing, the optimizer <br>   sees opportunity in and warns..so I started writing<br>   something using unsigned math, which isn't subject<br>   to such fragility, started testing it by comparison<br>   to the existing..found the existing to be wrong <br><br><br>  I didn't really understand the code that was there.<br>  
But from the spec and behavior I could see -- round down negative results.<br>   Which you can do by roughly - ((abs(a) + abs(b) - 1) / abs(b))<br>   Round up the positive result.<br><br> - Jay<br><br><br>> Date: Sun, 17 Jan 2010 08:49:45 +0100<br>> From: roland.illig@gmx.de<br>> To: m3devel@elegosoft.com<br>> Subject: Re: [M3devel] bugs in hand.c division<br>> <br>> Jay K schrieb:<br>> > The gcc-4.2 -O2 case is for LONG_MIN / -1, which overflows.<br>> > What is that supposed to equal?<br>> > For any version that doesn't "crash", the result is LONG_MIN.<br>> <br>> That's the best result one can get besides throwing an exception. With <br>> unlimited integers, the result would be LONG_MAX + 1, which equals <br>> LONG_MIN (modulo 2^BITSIZE(LONG)) when you are using two's complement <br>> arithmetics.<br>> <br>> Roland<br>                                     </body>
</html>