| Autor |
Nachricht |
__username
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 79
|
__username Mitglied
16:03:39 15.02.2012 Titel: |
FPU: (3 / 10) == 0.29999999... |
Zitieren |
Hallo, naja der Titel sagt eigentlich schon alles.
Mein Code sieht ungefähr folgendermaßen aus:
| Assembler: | 1 2 3 4 5 6 7 8 9 10 11 12 | finit
mov RAX, 3
push RAX
fild qword ptr [RSP]
push 0Ah
fidiv dword ptr [RSP]
...
fst qword ptr [RSP]
pop RAX
movd XMM0, RAX
...
ret | |
Naja, wie gesagt, wo eigentlich exakt 0.3 herauskommen sollte, kommt 0.2999999999...
Woran liegt das?
Gruß |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
16:09:45 15.02.2012 Titel: |
|
Zitieren |
0.3 ist als IEEE float/double nicht exakt darstellbar. |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 16:10:19 15.02.2012, insgesamt 2-mal bearbeitet |
|
 |
__username
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 79
|
__username Mitglied
16:31:37 15.02.2012 Titel: |
|
Zitieren |
Naja, immerhin lag es nicht an mir
Danke! |
|
|
|
 |
masm
Unregistrierter
|
masm Unregistrierter
16:40:33 15.02.2012 Titel: |
|
Zitieren |
wenn du schon das Ergebnis in XMM0 zurückgibst, kannst du es dort auch gleich berechnen ;-)
| Code: | .const
c1 REAL8 3.0
c2 REAL8 10.0
.code
movsd xmm0,c1
divsd xmm0,c2 | |
Was verwendest du den zur Ausgabe? - Mit den CRT Funktionen wie printf() sollte eigentlich auch 0.3 ausgespuckt werden. |
|
|
|
 |
__username
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 79
|
__username Mitglied
16:45:58 15.02.2012 Titel: |
|
Zitieren |
Nun das ist ja nicht das einzige was ich per FPU mache, von daher...
Ausgeben tu ich das erstmal garnicht, hab mir den Wert direkt in Visual Studio angesehen.
BTW:
fidiv vs. divsd
Wie sieht´s da geschwindigkeitsmäßig aus ? |
|
|
|
 |
masm
Unregistrierter
|
masm Unregistrierter
17:10:45 15.02.2012 Titel: |
|
Zitieren |
| __username schrieb: | | fidiv vs. divsd |
SSEx ist grundsätzlich schneller, schon allein daher, dass hier kein Register-Stack gemanagt werden muss. |
|
|
|
 |
__username
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 79
|
__username Mitglied
17:27:47 15.02.2012 Titel: |
|
Zitieren |
Wunderbar, wieder was dazugelernt
Kann man sich das dann in etwa so vorstellen (von wegen Geschwindigkeit):
SSE bzw. erweiterter Befehlssatz <- "Standard" CPU Befehlssatz <- FPU
? |
|
|
|
 |
hellihjb
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.05.2006
Beiträge: 1654
|
hellihjb Mitglied
13:32:04 16.02.2012 Titel: |
|
Zitieren |
| __username schrieb: | Kann man sich das dann in etwa so vorstellen (von wegen Geschwindigkeit):
SSE bzw. erweiterter Befehlssatz <- "Standard" CPU Befehlssatz <- FPU
? |
Du musst das Gesamtsystem betrachten:
Es gibt eine Menge von Rechenwerken die parallel arbeiten und Du erzielst den groessten Durchsatz indem alle optimal ausgelastet sind und keins auf das andere warten muss.
Selbst die Integer-Einheit besteht intern aus parallelen Addier- und Multiplizierwerken (die Verteilung nimmt Dir da aber das CPU-Frontend ab).
Auf eine Recheneinheit gaenzlich zu verzichten waere Unsinn. |
_________________ "Your code is so broken that it's not possible to fix it"
|
|
 |
__username
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 79
|
__username Mitglied
14:00:52 16.02.2012 Titel: |
|
Zitieren |
Hab ich mir fast gedacht, aber ich kann da auf meiner CPU keine Rechenwerke erkennen, ist irgendwie zu klein
Nein Spaß bei seite, das heißt also, dass ich möglichst alles parallel nutze?
Naja, muss mir wohl mal ein Büchlein über aktuelle CPU-Architekturen im allgemeinen besorgen... |
|
|
|
 |
Marc-O
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 211
|
Marc-O Mitglied
01:47:21 28.02.2012 Titel: |
|
Zitieren |
Studiengang Computersystem hilft da sehr gut dieses jene zu verstehen ;-) Ich spreche aus Erfahrung muss es mir noch bis Mitte März in den Kopf prügeln damit die Prüfung gut wird.
MfG Marco
PS: Und die den Standard des IEEE kannst dir einfach mal in der Wiki anschauen, damit es einfach zu verstehen ist wieso die zahlen nicht genauer dargestellt werden können. |
_________________ CodeBlocks Nightly
MinGW64 (Windows) / gcc (Linux)
Alles was so anfällt blog
|
|
 |