Freigeben über


_mm_nmacc_sd

Visual Studio 2010 SP1 wird benötigt.

Microsoft-spezifisch

Generiert die FMA4 XMM-Anweisung vfnmaddsd, um eine einfach gerundete, negative Multiplikation-Addition mit einem Gleitkommawert mit doppelter Genauigkeit für die niederwertigen Gleitkommawerte der Quellen auszuführen.

__m128d _mm_nmacc_sd (
   __m128d src1,
   __m128d src2,
   __m128d src3
); 

Parameter

  • [in] src1
    Ein 128-Bit-Parameter, der einen 64-Bit-Gleitkommawert im unteren Quadwort enthält.

  • [in] src2
    Ein 128-Bit-Parameter, der einen 64-Bit-Gleitkommawert im unteren Quadwort enthält.

  • [in] src3
    Ein 128-Bit-Parameter, der einen 64-Bit-Gleitkommawert im unteren Quadwort enthält.

Rückgabewert

Ein 128-Bit-Ergebnis r, das zwei 64-Bit-Gleitkommawerte enthält.

r[0] := -(src1[0] * src2[0]) + src3[0];
r[1] := 0.;

Anforderungen

Intrinsisch

Architektur

_mm_nmacc_sd

FMA4

Headerdatei <intrin.h>

Hinweise

Der niederwertige Gleitkommawert mit doppelter Genauigkeit in src1 wird mit dem entsprechenden Wert in src2 multipliziert. Das Ergebnis wird negiert und zum zugehörigen Wert in src3 addiert, und das Ergebnis wird im zugehörigen Wert im Ziel gespeichert. Die anderen Werte in src1, src2 und src3 werden ignoriert, und der höherwertige Gleitkommawert mit doppelter Genauigkeit des Ergebnisses wird auf 0 festgelegt. Die Multiplikation-Negation-Addition wird mit einer einzelnen abschließenden Rundung ausgeführt, als ob die Zwischenergebnisse mit unendlicher Genauigkeit berechnet wurden.

Die vfnmaddsd-Anweisung ist Teil der FMA4-Anweisungsfamilie. Bevor Sie diese systeminterne Funktion verwenden, müssen Sie sicherstellen, dass der Prozessor diese Anweisung unterstützt. Um die Hardwareunterstützung für diese Anweisung zu bestimmen, rufen Sie die systeminterne Funktion __cpuid mit InfoType = 0x80000001 auf, und prüfen Sie Bit 16 von CPUInfo[2] (ECX). Dieses Bit ist 1, wenn die Anweisung unterstützt wird, und andernfalls 0.

Beispiel

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128d a, b, c, d;
    int i;
    for (i = 0; i < 2; i++) {
        a.m128d_f64[i] = i;
        b.m128d_f64[i] = 2.;
        c.m128d_f64[i] = 3.;
    }
    d = _mm_nmacc_sd(a, b, c);
    for (i = 0; i < 2; i++) printf_s(" %.3lf", d.m128d_f64[i]);
    printf_s("\n");
}
  

Siehe auch

Referenz

__cpuid, __cpuidex

Weitere Ressourcen

_mm256_nmacc_pd

_mm_nmacc_pd

_mm_nmacc_ss

_mm_macc_sd

_mm_msub_sd

_mm_nmsub_sd

In Visual Studio 2010 SP1 hinzugefügte systeminterne FMA4-Funktionen

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

März 2011

Diesen Inhalt hinzugefügt.

SP1-Funktionsänderung.