comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » MOD operator
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
MOD operator [message #22040] Tue, 17 October 2000 00:00 Go to next message
Theo Brauers is currently offline  Theo Brauers
Messages: 58
Registered: November 1997
Member
Hi experts.

I was wondering if the result of the MOD operator in IDL changed
from previous versions (4.x, 5.0) to the current version (5.3.1).
Now the output is:

IDL> PRINT, (FINDGEN(8)-4.) MOD 3
-1.00000 0.000000 -2.00000 -1.00000 0.000000
1.00000 2.00000 0.000000

When I programmed a function long ago I used the MOD operator
expecting the output

IDL> PRINT, (FINDGEN(8)-4.) MOD 3
2.00000 0.000000 1.00000 2.00000 0.000000
1.00000 2.00000 0.000000

I used MOD to get rid number lower than zero and higher than
23.999999 when calculating the hours of the day for example.

Any help or tests with old versions are appreciated. Thanks

Theo


--
----------------------------------------------
Dr. Theo Brauers
Institut fuer Atmosphaerische Chemie (ICG-3)
Forschungszentrum Juelich
52425 JUELICH, Germany
Tel. +49-2461-61-6646 Fax. +49-2461-61-5346
http://www.kfa-juelich.de/icg/icg3/MITARBEITER/th.brauers.ht ml
Re: MOD operator [message #22170 is a reply to message #22040] Wed, 18 October 2000 00:00 Go to previous message
Theo Brauers is currently offline  Theo Brauers
Messages: 58
Registered: November 1997
Member
Thanks for your help. In the meantime I found (with help from Franz Rohrer
and Markus Fuehrer) that there is a difference between
a MOD b = a-INT(a/b)*b
and
modulo(a,b) = a-FLOOR(a/b)*b

I wrote an function calc_modulo
------
FUNCTION calc_modulo, a, b
RETURN, a - FLOOR(a/b)*b
END
------
which works fine for me.
Cheers Theo
>
> Theo Brauers wrote:
>>
>> I was wondering if the result of the MOD operator in IDL changed
>> from previous versions (4.x, 5.0) to the current version (5.3.1).
>> Now the output is:
>>
>> IDL> PRINT, (FINDGEN(8)-4.) MOD 3
>> -1.00000 0.000000 -2.00000 -1.00000 0.000000
>> 1.00000 2.00000 0.000000
>>
>> When I programmed a function long ago I used the MOD operator
>> expecting the output
>>
>> IDL> PRINT, (FINDGEN(8)-4.) MOD 3
>> 2.00000 0.000000 1.00000 2.00000 0.000000
>> 1.00000 2.00000 0.000000
>>
>
> To the best of my knowledge, this is always the way IDL (and most other
> languages providing a MOD operator) has worked. If you wish to take the
> mod of a negative number , the result will be a negative number between
> -(n+1) and 0. A positive input yields a positive result. So when we're
> trying to limit a value to between 0 and 2*pi, we often end up with code
> that looks something like:
>
> x = ((y mod (2*pi)) + 2*pi) mod (2*pi)
>
> Hope this helps.
>
> Phillip

--
----------------------------------------------
Dr. Theo Brauers
Institut fuer Atmosphaerische Chemie (ICG-3)
Forschungszentrum Juelich
52425 JUELICH, Germany
Tel. +49-2461-61-6646 Fax. +49-2461-61-5346
http://www.kfa-juelich.de/icg/icg3/MITARBEITER/th.brauers.ht ml
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Call external with HP-UX
Next Topic: Commercial IDL/Wave alternatives

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 15:50:14 PDT 2025

Total time taken to generate the page: 0.00628 seconds