Automatic number type selection.
authorClaude Heiland-Allen <claude@mathr.co.uk>
Sat, 21 Dec 2013 12:49:24 +0000 (12:49 +0000)
committerClaude Heiland-Allen <claude@mathr.co.uk>
Sat, 21 Dec 2013 12:49:24 +0000 (12:49 +0000)
commitbd7aa445bfe2b02a2883dccdb561c58dcc620aeb
treeeb42f8db188ff7fb7df274511faf62683b484665
parent20ff08458c29dc339a363cb155fb2e1a77f5c302
Automatic number type selection.

We're telling our render program which number type to use.  We can improve
this by calculating the best number type to use, using the spacing between
pixels.  We compute the number of bits of precision needed to distinguish
points with a magnitude around 1 using a base-2 logarithm.  We default to
double precision because it's the fastest, but if we need more precision
we upgrade to long double.  If long double still insuffices, we print a
warning message on the standard error stream.  We also print information
messages so we know which number type our program is using.

    $ for exp in $(seq -w 0 20)
      do
        ./render \
          -1.26031888962837738806438608314184 \
           0.38347214027113837724841765113596 \
          2e-${exp} ${exp} &&
        ./colour ${exp} > ${exp}.ppm
      done
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using double
    INFO using long double
    INFO using long double
    INFO using long double
    WARNING insufficient precision (need 63 bits)
    INFO using long double
    WARNING insufficient precision (need 67 bits)
    INFO using long double
    WARNING insufficient precision (need 70 bits)
    INFO using long double
    WARNING insufficient precision (need 73 bits)
    INFO using long double
    $

The last 4 images are indeed increasingly pixelated.
render.c