March 04, 2012
Le 04/03/2012 22:59, Adam D. Ruppe a écrit :
> On Sunday, 4 March 2012 at 21:52:15 UTC, deadalnix wrote:
>> OK, now read the other half of the post.
>
> Try reading the second half of my first post.

I did, it doesn't address why in one case we have a floating point error, and in the other a divide error (which is in the first place why I do a drama about inconsistency, as Timon said).
March 04, 2012
On Sunday, 4 March 2012 at 23:27:45 UTC, deadalnix wrote:
> I did, it doesn't address why in one case we have a floating point error, and in the other a divide error

If you use literals, the compiler catches it at compile
time. "Error: divide by zero" happens when you run the
compiler.

If not, the operating system catches it at runtime.
"Floating point exception" happens when you run the
program.

There's nothing inconsistent about this; it is just
the difference between a compile time error and a
run time error.

March 05, 2012
On Mon, 05 Mar 2012 00:29:44 +0100, deadalnix <deadalnix@gmail.com> wrote:

> Le 04/03/2012 22:59, Timon Gehr a écrit :
>> On 03/04/2012 10:58 PM, deadalnix wrote:
>>> Le 04/03/2012 22:11, Adam D. Ruppe a écrit :
>>>> On Sunday, 4 March 2012 at 21:07:50 UTC, deadalnix wrote:
>>>>> No floating point operation is involved here.
>>>>
>>>> It is a Linux issue, not a D one.
>>>>
>>>> Try doing the same thing in C.
>>>
>>> OK, now read the other half of the post.
>>
>> I bet he did, but settled to responding to the part that was explicitly
>> marked as being 'the problem'.
>
> You'll find 2 problems, not one.
>
> Problem one is the floating point reference, which is a problem when no floating point is involved. This is the counterintuitive part.
>
> Problem two is the inconsistency of behavior. Sometime a divide error is triggered and some other a floating point error. This is the inconsistent part.

http://en.wikipedia.org/wiki/SIGFPE
March 05, 2012
On 5 March 2012 14:39, Martin Nowak <dawg@dawgfoto.de> wrote:
> On Mon, 05 Mar 2012 00:29:44 +0100, deadalnix <deadalnix@gmail.com> wrote:
>
>> Le 04/03/2012 22:59, Timon Gehr a écrit :
>>>
>>> On 03/04/2012 10:58 PM, deadalnix wrote:
>>>>
>>>> Le 04/03/2012 22:11, Adam D. Ruppe a écrit :
>>>>>
>>>>> On Sunday, 4 March 2012 at 21:07:50 UTC, deadalnix wrote:
>>>>>>
>>>>>> No floating point operation is involved here.
>>>>>
>>>>>
>>>>> It is a Linux issue, not a D one.
>>>>>
>>>>> Try doing the same thing in C.
>>>>
>>>>
>>>> OK, now read the other half of the post.
>>>
>>>
>>> I bet he did, but settled to responding to the part that was explicitly marked as being 'the problem'.
>>
>>
>> You'll find 2 problems, not one.
>>
>> Problem one is the floating point reference, which is a problem when no floating point is involved. This is the counterintuitive part.
>>
>> Problem two is the inconsistency of behavior. Sometime a divide error is triggered and some other a floating point error. This is the inconsistent part.
>
>
> http://en.wikipedia.org/wiki/SIGFPE

Ok, so it turns out I wasn't completely wrong.

While the C standards states that SIGFPE will never be thrown for uint types, D presumably makes no such guarantee. Also, the example there uses `int`s and the compiler warns about a division by zero, then running it causes a floating point error.

So other than the fact that you are using `uint`s rather than `int`s the behaviour is identical to that of C.

--
James Miller
March 05, 2012
Le 05/03/2012 00:33, Adam D. Ruppe a écrit :
> On Sunday, 4 March 2012 at 23:27:45 UTC, deadalnix wrote:
>> I did, it doesn't address why in one case we have a floating point
>> error, and in the other a divide error
>
> If you use literals, the compiler catches it at compile
> time. "Error: divide by zero" happens when you run the
> compiler.
>
> If not, the operating system catches it at runtime.
> "Floating point exception" happens when you run the
> program.
>
> There's nothing inconsistent about this; it is just
> the difference between a compile time error and a
> run time error.
>

The 0 is known at comile time. You should get the error at compile time.
March 05, 2012
On Mon, 05 Mar 2012 12:01:40 +0100, deadalnix <deadalnix@gmail.com> wrote:

> Le 05/03/2012 00:33, Adam D. Ruppe a écrit :
>> On Sunday, 4 March 2012 at 23:27:45 UTC, deadalnix wrote:
>>> I did, it doesn't address why in one case we have a floating point
>>> error, and in the other a divide error
>>
>> If you use literals, the compiler catches it at compile
>> time. "Error: divide by zero" happens when you run the
>> compiler.
>>
>> If not, the operating system catches it at runtime.
>> "Floating point exception" happens when you run the
>> program.
>>
>> There's nothing inconsistent about this; it is just
>> the difference between a compile time error and a
>> run time error.
>>
>
> The 0 is known at comile time. You should get the error at compile time.

The divide by zero is an error during constfolding not a specific compiler check.
1 2
Next ›   Last »