www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Disable NaN and Inf

reply Jonathan Crapuchettes <jcrapuchettes gmail.com> writes:
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
Feb 05 2010
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
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
Feb 06 2010
next sibling parent =?ISO-8859-1?Q?Pelle_M=E5nsson?= <pelle.mansson gmail.com> writes:
On 02/06/2010 09:16 AM, Andrei Alexandrescu wrote:
 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

divide several other arrays. A single pass will be faster and more clear, I think.
Feb 06 2010
prev sibling next sibling parent reply dsimcha <dsimcha yahoo.com> writes:
== Quote from Andrei Alexandrescu (SeeWebsiteForEmail 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

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]; }
Feb 06 2010
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
dsimcha wrote:
 == Quote from Andrei Alexandrescu (SeeWebsiteForEmail 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

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
Feb 06 2010
parent Don <nospam nospam.com> writes:
Andrei Alexandrescu wrote:
 dsimcha wrote:
 == Quote from Andrei Alexandrescu (SeeWebsiteForEmail 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

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.
Feb 06 2010
prev sibling next sibling parent reply Jonathan Crapuchettes <jcrapuchettes gmail.com> writes:
Are NaNs and Infs the result of a CPU operation or is that part of the D
language?
JC

Andrei Alexandrescu wrote:
 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

Feb 06 2010
parent BCS <none anon.com> writes:
Hello Jonathan,

 Are NaNs and Infs the result of a CPU operation or is that part of the
 D language? 

The Floating point unit does all of that and IIRC it's defined as part of the IEEE standard. -- <IXOYE><
Feb 06 2010
prev sibling parent Trass3r <un known.com> writes:
 Are NaNs and Infs the result of a CPU operation or is that part of the D  
 language?

http://en.wikipedia.org/wiki/NaN
Feb 06 2010