Mögliche Duplizieren:
Is JavaScript's Math broken?
Dealing with accuracy problems in floating-point numbersGarbage-Bits in der Gleitkommadarstellung von Zahlen in C/C++ Programm
den Code Betrachten unten und seine Ausgabe:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <limits>
#include <vector>
int main(int argc, char *argv[])
{
double xleft = 0;
double xright = 1.0;
double dx = 0.1;
std::cout << std::setprecision(36) << "dx is " << dx << std::endl;
int numgridpts = ((int) ceil ((xright - xleft)/dx)) + 1;
for (int i = 0; i < numgridpts ; ++i)
{
std::cout << std::setprecision(36) << xleft + i*dx << std::endl;
}
return 0;
}
[~:ICgen/$ ./a.out
dx is 0.100000000000000005551115123125782702
0
0.100000000000000005551115123125782702
0.200000000000000011102230246251565404
0.300000000000000044408920985006261617
0.400000000000000022204460492503130808
0.5
0.600000000000000088817841970012523234
0.700000000000000066613381477509392425
0.800000000000000044408920985006261617
0.900000000000000022204460492503130808
1
Meine Frage ist, wenn ich o drucke ut die Zahlen bis zu einer Genauigkeit von 36 Bit, warum sind die Zahlen, 0, 0,5 und 1,0 genau dargestellt, wo die anderen Zahlen scheinen einige Müllnummern am Ende platziert haben?
Auch wenn ich die Fließkommadarstellungen von 0,2 und 0,1 wie in der obigen Ausgabe gezeigt hinzufügen, scheinen sie nicht zu der Darstellung von 0,3, in dem Teil der Garbage-Bits hinzuzufügen.
I Linux Ubuntu 10.10 und den GCC Compiler verwende
Sie erhalten etwa 10 Antworten in 3 ... 2 ... 1 ... (das alles wird Ihnen sagen, dass Fließkomma-Arithmetik nicht immer genau eine gegebene Dezimalzahl darstellen kann). –
"Fließkomma-Arithmetik kann nicht immer genau eine gegebene Dezimalzahl darstellen" –
@Eric J. Dann warum sind 0,5, 1 und 0 genau oben dargestellt? – smilingbuddha