I thought it would be interesting therefore to plot the density of numbers across the number line. This is a nice illustration of the fact that numbers near 0 have higher precision that large numbers. The following plots are for 32bit floats (this was on a 64bit Snow Leopard Mac):
The following code was used to generate the data, which was plotted with Gnuplot:
#include <iostream>
#include <limits>
using namespace std;
int main() {
//float smallest = 0.00000000000000000000001;
float smallest = 0.00000001;
float block_size = 10;
for(float range_start=-100000;range_start<100000;range_start+=block_size) {
float range_end = range_start+block_size;
size_t different_n=0;
float n;
for(float n=range_start;n<range_end;) {
float new_n=n;
for(float i=1;new_n <= n;i++) {
new_n = n + (smallest*i);
}
n = new_n;
different_n++;
}
cout << range_start+((range_end-range_start)/2) << " " << different_n << endl;
}
}
No comments:
Post a Comment