Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Assembler ::  FPU: (3 / 10) == 0.29999999...  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
__username
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 79
Beitrag __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
Beitrag 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
Beitrag __username Mitglied 16:31:37 15.02.2012   Titel:              Zitieren

:rolleyes:

Naja, immerhin lag es nicht an mir :D
Danke!
masm
Unregistrierter




Beitrag 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
Beitrag __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




Beitrag 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
Beitrag __username Mitglied 17:27:47 15.02.2012   Titel:              Zitieren

Wunderbar, wieder was dazugelernt :D

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
Beitrag 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
Beitrag __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
Beitrag 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
c++.de :: Assembler ::  FPU: (3 / 10) == 0.29999999...  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.