NO MOM
I CANT PAUSE.
Scientific Number Tools Documentación
Soporte
Explorar lecciones

14. Suma lotes de valores con SIMD desde C++ (opcional)

Construye este ejemplo en tu proyecto de Unreal y comprueba el resultado en cada paso.

En esta página

Este ejercicio es para proyectos con C++. Si trabajas exclusivamente en Blueprint, puedes terminar aquí: los nodos de arrays del apartado 8 siguen siendo tu recorrido. Esta API por lotes no aparece como un conjunto equivalente de nodos Blueprint.

Vas a sumar cinco saldos con cinco incrementos, conservando un resultado por posición. No es una suma de todos los elementos en un solo total.

A. Prepara un Actor de prueba

  1. Crea una clase C++ derivada de Actor llamada MiLoteNumeros mediante el asistente de Unreal. Usa el módulo de tu juego, no el del plugin.
  2. En el archivo NombreDeTuModulo.Build.cs, añade "ScientificNumberTools" a la lista de dependencias privadas existente. Conserva las demás dependencias del proyecto.
  3. En MiLoteNumeros.cpp, añade estos includes después del include de su propia cabecera:
#include "ScientificNumber.h"
#include "ScientificNumberSIMD.h"
  1. Localiza AMiLoteNumeros::BeginPlay(). Conserva Super::BeginPlay(); y añade debajo el siguiente bloque, dentro de la función:
TArray<FScientificNumber> Saldos;
TArray<FScientificNumber> Incrementos;
for (int32 Indice = 1; Indice <= 5; ++Indice)
{
    Saldos.Add(FScientificNumber(Indice * 10.0, 0));
    Incrementos.Add(FScientificNumber(Indice, 0));
}

TArray<FScientificNumber> Resultados;
Resultados.SetNum(Saldos.Num());
FScientificNumberSIMD::BatchAdd(
    Saldos.GetData(), Incrementos.GetData(),
    Resultados.GetData(), Saldos.Num());

for (int32 Indice = 0; Indice < Resultados.Num(); ++Indice)
{
    const FScientificNumber Esperado((Indice + 1) * 11.0, 0);
    const bool Correcto = Resultados[Indice].IsSuccess()
        && Resultados[Indice] == Esperado;
    UE_LOG(LogTemp, Display, TEXT("Lote[%d]: %s"),
        Indice, Correcto ? TEXT("OK") : TEXT("ERROR"));
}
  1. Compila el proyecto con tu flujo habitual de C++. Coloca una instancia de MiLoteNumeros en el nivel y pulsa Play. Abre Output Log y busca Lote[.

Qué debes ver: cinco líneas OK, de Lote[0] a Lote[4]. Los resultados correspondientes son 11, 22, 33, 44 y 55. Puedes detenerte con un breakpoint después de BatchAdd e inspeccionar Resultados para ver su mantisa y exponente.

B. Comprueba qué representa cada posición

Cambia Indice * 10.0 por Indice * 100.0 y cambia el valor esperado de 11.0 a 101.0. Recompila y repite: los resultados serán 101, 202, 303, 404 y 505. Cada posición combina el saldo y el incremento de esa misma posición.

Ambas entradas y la salida deben disponer de al menos Count elementos; en el ejemplo se preparan cinco. BatchAdd no devuelve un bool global: comprueba el estado de cada Scientific Number resultante antes de usarlo en el juego.

Este ejercicio enseña a llamar a la API y leer su resultado. Cinco elementos no demuestran una mejora de rendimiento; el beneficio depende del tamaño de los lotes, los datos y el equipo. Úsala cuando tu código ya procese conjuntos de números, sin cambiar por ello la lógica de la cartera Blueprint.