Re: summation problem [message #24621 is a reply to message #24550] |
Thu, 05 April 2001 09:54   |
Paul van Delst
Messages: 364 Registered: March 1997
|
Senior Member |
|
|
Jaco van Gorkom wrote:
>
> Paul van Delst wrote:
>> Jaco van Gorkom wrote:
>>> Manish wrote:
>>> ...
>>>> I have a program which produces an array of values of sunlight flux during
>>>> the day. Unfortunately, it produces crazy numbers before the sunrises and
>>>> after it sets(as expected). I'm summing the values throughout the day to
>>>> get a total integrated day flux, but here's the problem - is there a way of
>>>> telling the TOTAL function to ignore negative numbers and NaN numbers?
>>>
>>> IDL> print, total(test>0,/nan)
>>> 7.00000
>>> % Program caused arithmetic error: Floating illegal operand
>>>
>>> The 'illegal operand' error appears to be harmless, caused by comparing test>0:
>>
>> Harmless maybe, but I for one don't like seeing illegal operand errors, let alone ignoring
>> them. What if you add some code that tries to take the log of a -ve number, see the same
>> error and shrug it off?
>
> That is *exactly* what I'd do: shrug it off! The log of a -ve number gives me
> -Inf as a
> result, which will propagate through any calculation to be NaN, Inf, or -Inf.
> Just another
> missing data point.
Yoicks. Please prepend any procedures/functions you distribute with your initials, JVG_
:o)
>> loc_finite = WHERE( FINITE( test ) EQ 1, count_finite )
>> IF ( count_finite GT 0 ) THEN $
>> sum = TOTAL( test[ loc_finite ] > 0.0 ) $
>> ELSE $
>> sum = !VALUES.F_NAN ; Or some other suitable flag
>
> Of course I see your point. I would probably implement a FINITE() check if I
> were writing a
> full program, but the annoying special-case programming for when WHERE() returns
> -1 held me
> back here.
Hence the use of count_finite. Then it doesn't matter what is returned by WHERE() in
loc_finite.
> On second thought: WHERE() could only return -1 for a day without sunrise...
I'm sure there are some Laplanders that use IDL :o) And there's those Antarctic folk.
>> Oh, and make sure you set !EXCEPT = 2 in your idl setup file. That'll learn ya to remove
>> errors from your code :o)
>
> Geez! Thanks for pointing that out! This solves everything Manish: !EXCEPT = 0.
Oof! That hurtz.
paulv
--
Paul van Delst A little learning is a dangerous thing;
CIMSS @ NOAA/NCEP Drink deep, or taste not the Pierian spring;
Ph: (301)763-8000 x7274 There shallow draughts intoxicate the brain,
Fax:(301)763-8545 And drinking largely sobers us again.
paul.vandelst@noaa.gov Alexander Pope.
|
|
|