user1677: How do I store floats in flash and how do I read them from there? (I need a look-up table for pairs of float values.)
The storing part doesn't seem to be so difficult as this compiles:
PROGMEM float value1 = 1.23456;

But how do I read them? Do I need to copy them byte by byte to a float variable, or is there a better way? (I am using an Arduino ATmega 328p with 4-byte floats.)

user28729: I realize that the OP asked about a single value, but I thought I'd add info on retrieving from an array.
const float pmdata[] PROGMEM = {1.0, 2.0, 3.0};

then retrieve thusly:
float val = pgm_read_float(&pmdata[idx]);


user4143: There is a helper macro in avr-libc that is designed just for this purpose:
#define pgm_read_float_near(address_short) __LPM_float((uint16_t)(address_short))

Read a float from the program space with a 16-bit (near) address.

Note
    The address is a byte address. The address is in the program space. 

Use it like:
PROGMEM float pi=3.141592653;  // constant value in flash
float diameter = 24.332154;    // variable user value

float circumference = diameter * pgm_read_float_near(&pi);


1677: <p>How do I store floats in flash and how do I read them from there? (I need a look-up table for pairs of float values.)</p>

<p>The storing part doesn't seem to be so difficult as this compiles:</p>

<pre><code>PROGMEM float value1 = 1.23456;
</code></pre>

<p>But how do I read them? Do I need to copy them byte by byte to a float variable, or is there a better way? (I am using an Arduino ATmega 328p with 4-byte floats.)</p>
 28729: <p>I realize that the OP asked about a single value, but I thought I'd add info on retrieving from an array.</p>

<pre><code>const float pmdata[] PROGMEM = {1.0, 2.0, 3.0};
</code></pre>

<p>then retrieve thusly:</p>

<pre><code>float val = pgm_read_float(&amp;pmdata[idx]);
</code></pre>
 4143: <p>There is a helper macro in avr-libc that is designed just for this purpose:</p>

<pre><code>#define pgm_read_float_near(address_short) __LPM_float((uint16_t)(address_short))

Read a float from the program space with a 16-bit (near) address.

Note
    The address is a byte address. The address is in the program space. 
</code></pre>

<p>Use it like:</p>

<pre><code>PROGMEM float pi=3.141592653;  // constant value in flash
float diameter = 24.332154;    // variable user value

float circumference = diameter * pgm_read_float_near(&amp;pi);
</code></pre>
