On Fri, 8 May 2020, Artur Tarassow wrote:
I've stumbled over this weird thing trying to retrieve the day of
Easter
Sunday applying the easterday() function as shown in the help text.
However, it seems that scalar "d" is not a proper integer as trying to
restrict the sample to a single day fails with the error message "No
observations would be left!". Replacing "d" in the "smpl"
command by 5 works
though. This is using latest git on Ubuntu 19.10.
<hansl>
clear
set verbose off
nulldata 200
setobs 7 2015-01-01 --time-series
series year, month, day
isoconv($obsdate, &year, &month, &day)
scalar e = easterday(2015)
scalar m = floor(e)
scalar d = 100*(e-m)
[...]
Adding at this point
printf "4.05 = %.15f\n", 4.05
printf "d = %.15f\n", d
eval d == 5
reveals
4.05 = 4.050000000000001
d = 4.999999999999983
0
So round() will take d to 5, but not floor(). Hansl doesn't do
integer arithmetic -- and couldn't in this case anyway since e =
4.05, coding for the 5th of April.
It seems to me easterday() would be better returning a 2-vector
holding month and day. As things stand you have to use round() on
the day, or take this approach:
edate = sprintf("%.2f", easterday(2015))
scalar m, d
sscanf(edate, "%d.%d", m, d)
eval d == 5 # gives 1
Allin