[phobos] [Fwd: "Unsigned-related bugs never occur in real code."]
Andrei Alexandrescu
andrei at erdani.com
Thu Jan 21 08:44:51 PST 2010
Don, do you have an idea of a simple change to the language that would
prevent at least the most pernicious of these issues?
Andrei
Don Clugston wrote:
> The problem is that this code passes:
>
> void main()
> {
> float x = 0;
> x += 2u - 5u;
> assert(x == uint.max - 3);
> }
> But it's pretty unexpected and unhelpful behaviour.
> It *doesn't* pass if you set: x = x + 2u - 5u. But x += y is
> equivalent to: x = x + cast(typeof(x))y; and since there's an
> explicit cast, no error message is generated.
>
>
>
> 2010/1/21 Sean Kelly <sean at invisibleduck.org>:
>> I got a reasonable answer by casting to int before calling abs():
>>
>> import std.math, std.stdio;
>>
>> void main() {
>> auto a = [ 4, 4, 2, 3, 2 ];
>> float avgdist = 0;
>> uint count;
>>
>> foreach (i, e1; a) {
>> foreach (j, e2; a) {
>> if (i == j) continue;
>> if (e1 != e2) continue;
>> ++count;
>> writeln("adding ", cast(int)(i - j));
>> avgdist += abs(cast(int)(i - j));
>> }
>> }
>>
>> writeln(count, " ", avgdist / count);
>> }
>>
>> On Jan 21, 2010, at 12:41 AM, Andrei Alexandrescu wrote:
>>
>>> The problem persists even if I remove the call to abs(). At least its removal makes things look more suspicious.
>>>
>>> Andrei
>>>
>>> Don Clugston wrote:
>>>> 2010/1/21 Sean Kelly <sean at invisibleduck.org>:
>>>>> My first inclination would be for abs to only accept signed values. Unsigned values don't really seem appropriate for unchecked math operations.
>>>> I agree, it doesn't make sense to take the absolute value of something
>>>> which doesn't have a sign. With range checking, it ought to be
>>>> possible to implicitly cast from uint to int, which would allow all of
>>>> the sensible uses. Unfortunately, implicit casting and templates don't
>>>> interact well. So I think abs() might need to go back to being a
>>>> non-template function.
>>>>> On Jan 20, 2010, at 8:50 PM, Andrei Alexandrescu wrote:
>>>>>
>>>>>> Is there anything we can do about this?
>>>>>>
>>>>>> Andrei
>>>>>>
>>>>>> -------- Original Message --------
>>>>>> Subject: "Unsigned-related bugs never occur in real code."
>>>>>> Date: Wed, 20 Jan 2010 20:42:50 -0800
>>>>>> From: Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org>
>>>>>> Organization: Digital Mars
>>>>>> Newsgroups: digitalmars.D
>>>>>>
>>>>>> "It's an academic problem. Don't worry about it and move on."
>>>>>>
>>>>>> That's what Walter kept on telling me. Yet I've spent the better part of
>>>>>> an hour reducing a bug down to the following:
>>>>>>
>>>>>> import std.math, std.stdio;
>>>>>>
>>>>>> void main() {
>>>>>> auto a = [ 4, 4, 2, 3, 2 ];
>>>>>> float avgdist = 0;
>>>>>> uint count;
>>>>>>
>>>>>> foreach (i, e1; a) {
>>>>>> foreach (j, e2; a) {
>>>>>> if (i == j) continue;
>>>>>> if (e1 != e2) continue;
>>>>>> ++count;
>>>>>> avgdist += abs(i - j);
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> writeln(count, " ", avgdist / count);
>>>>>> }
>>>>>>
>>>>>> May this post be an innocent victim of the war against unsigned-related
>>>>>> bugs.
>>>>>>
>>>>>>
>>>>>> Andrei
>>>>>> _______________________________________________
>>>>>> phobos mailing list
>>>>>> phobos at puremagic.com
>>>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>>> _______________________________________________
>>>>> phobos mailing list
>>>>> phobos at puremagic.com
>>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>>>
>>>> _______________________________________________
>>>> phobos mailing list
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>> _______________________________________________
>>> phobos mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
>>
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
More information about the phobos
mailing list