Visual C++ alatt elérhető valahogy az FPR regiszterek mind a 80 bitje x64-en?
80 bites lebegőpontos számításokra lenne szükségem, de úgy tűnik hogy a long double típus csak egy aliasa a double típusnak Visual C++ alatt, és nem használja ki az FPU teljes kapacitását. Minden más ismert fordítóban a long double 80-bites pontosságot jelöl!
Próbáltam inline assemblerrel elérni az FPR/MMX regisztereket, de úgy tűnik hogy a Visual C++ 64 biten nem támogatja még az inline assemblyt se.
Tényleg ennyire rossz lenne az oly sokak által használt és fényezett VC++? (linuxos vagyok, nem sokat találkozok vele) Szégyen szemre a programom egy részét gcc-vel kell fordítanom, vagy van valami megoldás arra hogy ki tudjam használni hardveresen a 80-bit floatot a fordítón belül? Esetleg valaki tudja hogy miért nem támogatja az inline assembly-t és a 80-bites floatot a VC++? Számomra ennek semmi értelme.
A projekt nem kompatibilis a gcc-vel, és nincs lehetőségem átalakítani se..
Az eredeti kérdésre a válasz: nem. Inline assemblyvel sem (csak 32 biten). Hogy miért? Kérdezd a Micro$oftot.
(egyébként mihez kell 80, és nem elég a 64? csak kíváncsiságból)
"Amúgy sem értem hogy egyetlen egy funkcióért miért kéne egy több száz megás könyvtárat betölteni egy sebességkritikus alkalmazásba."
Nem ismerem a vc plus-plust, de miért nem írod meg assemblyben a függvényt és linkeled össze? (.obj)
"Nem ismerem a vc plus-plust, de miért nem írod meg assemblyben a függvényt és linkeled össze? (.obj)"
Minden egyes függvényt ami használná az x87 utasításkészletet assemblyben írjam meg? A C++ kódban egy makróval ki tudtam volna cserélni a long double használatát egy ASM utasításra, de hogy minden függvényt írjak meg assemblyben annak nincs értelme. Arra ott van akkor a gcc és akkor azzal fordítom a megfelelő forrásfájlokat, minek ide assembly? Vagy arra gondolsz hogy csináljak valami getter setter függvényt és azt hívogassam? Az overhead miatt már érné meg az FPU használata.
Pont azt szeretném elkerülni hogy különböző fordítókkal keljen fordítani a programot minden egyes alkalommal hogy módosítok rajta, de lehet hogy az lesz a vége egy kis átszervezéssel...
"High Level Assembly."
Nekem tökéletesen megfelelne a NASM, TASM, YASM meg a társai, ismerem az x64 assembly-t. De megint csak ott a gcc helyettük.
"Azáltal, hogy valamennyi számítást 80 bitet használva végez, az Intel segít biztosítani (de nem garantálja) hogy elérjük a teljes 32-bites vagy 64-bites pontosságot számításainkban."
Ez így van, nekem meg van egy hibaküszöböm aminél nagyobb hibát nem engedhetek meg a rendszer stabil működéséhez. Sajnos nem én találtam ki, ezek a követelmények.
A teljesség kedvéért a 64 bites double 53 bitnyi pontosságot biztosít, a 32 bites float pedig 24-et, feltéve ha az IEEE 754 szabvány szerint tároljuk.
#3 Sajnos az StackOverflow-n is hasonló választ találtam, nincs rá lehetőség. Microsoft $ux és nem érdekli őket a C/C++ szabvány, a fordítójuk pedig erősen hiányos. Nem tudom kinek az ötlete volt anno hogy a projektet VC++-szal írja de mostanában jó nagyokat szívok miatta :)
Kösz a válaszokat.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!