OpenCL Fließkommapräzision

Ich habe ein Problem mit dem Host-Client-Float-Standard in OpenCL gefunden. Das Problem war, dass die von Opencl berechneten Gleitkommawerte beim Kompilieren in x86 nicht den gleichen Gleitkommawerten entsprechen wie mein Visual Studio 2010-Compiler. Beim Kompilieren in x64 befinden sie sich jedoch im selben Limit. Ich weiß, es muss etwas mit sein,http://www.viva64.com/de/b/0074/

Die Quelle, die ich beim Testen verwendet habe, war:http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelism Wenn ich das Programm in x86 laufen ließ, gab es mir 202 Zahlen, die gleich waren, als der Kernel und das C ++ - Programm Quadrat von 1269760 Zahlen nahmen. Beim 64-Bit-Build stimmten jedoch 1269760 Zahlen, mit anderen Worten 100%. Außerdem stellte ich fest, dass der Fehler zwischen dem berechneten Ergebnis von opencl und x86 c ++ 5,5385384e-014 war, was ein sehr kleiner Bruchteil, aber nicht klein genug ist, verglichen mit dem Epsilon der Zahl von 2,92212543378266922312416e-19.
Das liegt daran, dass der Fehler kleiner als das Epsilon sein muss, damit das Programm die beiden Zahlen als eine einzige gleiche Zahl erkennt. Normalerweise würde man Floats natürlich nie nativ vergleichen, aber es ist gut zu wissen, dass die Float-Limits unterschiedlich sind. Und ja, ich habe versucht, flt: static zu setzen, habe aber den gleichen Fehler erhalten.

Ich möchte eine Erklärung für dieses Verhalten. Vielen Dank im Voraus für alle Antworten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage