F_CPU can be set as a compiler parameter (-D) or as a definition
(#define) in your source code. If it is in source code, then it must be
placed above the #include statement that load the util/delay.h file.
The value of F_CPU must match the real clock frequency of the CPU, but
it cannot be used to configure the CPU. The CPU derives its clock from
an external crystal or resonator which should oscillate at 16 MHz. If
the fuse CLKDIV8 is set, then the initial CPU clock is 1/8 of the 16
MHz. On Arduino modules, this fuse should normally be off. Check that.
You software can modify the clock divider by writing to the CLKPRE
register. You can divide the 16 MHz by 1 .. 256.
Something is wired in your case because you say that the time is 1/4 of
the expected one. So the CPU seems to run at 64 MHz. Needless to say
that this is technically impossible. So the only thing I could imagine
is that your F_CPU is not properly set, although you say that it is.