Disable NaN and Inf

Don nospam at nospam.com
Sat Feb 6 12:16:01 PST 2010


Andrei Alexandrescu wrote:
> dsimcha wrote:
>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s 
>> article
>>> Jonathan Crapuchettes wrote:
>>>> I would like to divide one array by another using the slice syntax so
>>>> that I can benefit from the vectorized operation, but I am running into
>>>> a problem. Some of the numbers is my denominator array are 0, producing
>>>> NaNs and Infs in the result.
>>>>
>>>> My question is: Is there a way to force 0/0 and x/0 to result in 0?
>>>>
>>>> Thank you,
>>>> JC
>>> I don't know of a way. You may want to try first running a loop
>>> replacing 0 with inf throughout the denominator array. Then run
>>> vectorized division; any non-inf divided by inf yields 0.
>>> Andrei
>>
>> At this point it's probably useless to vectorize, though.  You may as 
>> well just
>> write something like:
>>
>> if(isNaN(arr2[i])) {
>>     result[i] = 0;
>> } else {
>>     result[i] = arr1[i] / arr2[i];
>> }
> 
> I don't know. In such cases only experimentation can prove anything.
> 
> Andrei

I think it would depend heavily on cache effects. If it fits into the L1 
cache, my guess is that doing a vectorized check followed by a 
vectorized division would be faster. But it's extremely difficult to 
predict this kind of thing.
If the array is larger than the cache, the per-element check would 
definitely be much quicker, since you'd only have one cache miss instead 
of two.



More information about the Digitalmars-d mailing list