MCPcopy Create free account
hub / github.com/PX4/eigen / packetmath_real

Function packetmath_real

test/packetmath.cpp:328–481  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

326}
327
328template<typename Scalar> void packetmath_real()
329{
330 using std::abs;
331 typedef internal::packet_traits<Scalar> PacketTraits;
332 typedef typename PacketTraits::type Packet;
333 const int PacketSize = PacketTraits::size;
334
335 const int size = PacketSize*4;
336 EIGEN_ALIGN_MAX Scalar data1[PacketTraits::size*4];
337 EIGEN_ALIGN_MAX Scalar data2[PacketTraits::size*4];
338 EIGEN_ALIGN_MAX Scalar ref[PacketTraits::size*4];
339
340 for (int i=0; i<size; ++i)
341 {
342 data1[i] = internal::random<Scalar>(-1,1) * std::pow(Scalar(10), internal::random<Scalar>(-3,3));
343 data2[i] = internal::random<Scalar>(-1,1) * std::pow(Scalar(10), internal::random<Scalar>(-3,3));
344 }
345 CHECK_CWISE1_IF(PacketTraits::HasSin, std::sin, internal::psin);
346 CHECK_CWISE1_IF(PacketTraits::HasCos, std::cos, internal::pcos);
347 CHECK_CWISE1_IF(PacketTraits::HasTan, std::tan, internal::ptan);
348
349 CHECK_CWISE1_IF(PacketTraits::HasRound, numext::round, internal::pround);
350 CHECK_CWISE1_IF(PacketTraits::HasCeil, numext::ceil, internal::pceil);
351 CHECK_CWISE1_IF(PacketTraits::HasFloor, numext::floor, internal::pfloor);
352
353 for (int i=0; i<size; ++i)
354 {
355 data1[i] = internal::random<Scalar>(-1,1);
356 data2[i] = internal::random<Scalar>(-1,1);
357 }
358 CHECK_CWISE1_IF(PacketTraits::HasASin, std::asin, internal::pasin);
359 CHECK_CWISE1_IF(PacketTraits::HasACos, std::acos, internal::pacos);
360
361 for (int i=0; i<size; ++i)
362 {
363 data1[i] = internal::random<Scalar>(-87,88);
364 data2[i] = internal::random<Scalar>(-87,88);
365 }
366 CHECK_CWISE1_IF(PacketTraits::HasExp, std::exp, internal::pexp);
367 for (int i=0; i<size; ++i)
368 {
369 data1[i] = internal::random<Scalar>(-1,1) * std::pow(Scalar(10), internal::random<Scalar>(-6,6));
370 data2[i] = internal::random<Scalar>(-1,1) * std::pow(Scalar(10), internal::random<Scalar>(-6,6));
371 }
372 CHECK_CWISE1_IF(PacketTraits::HasTanh, std::tanh, internal::ptanh);
373 if(PacketTraits::HasExp && PacketTraits::size>=2)
374 {
375 data1[0] = std::numeric_limits<Scalar>::quiet_NaN();
376 data1[1] = std::numeric_limits<Scalar>::epsilon();
377 packet_helper<PacketTraits::HasExp,Packet> h;
378 h.store(data2, internal::pexp(h.load(data1)));
379 VERIFY((numext::isnan)(data2[0]));
380 VERIFY_IS_EQUAL(std::exp(std::numeric_limits<Scalar>::epsilon()), data2[1]);
381
382 data1[0] = -std::numeric_limits<Scalar>::epsilon();
383 data1[1] = 0;
384 h.store(data2, internal::pexp(h.load(data1)));
385 VERIFY_IS_EQUAL(std::exp(-std::numeric_limits<Scalar>::epsilon()), data2[0]);

Callers

nothing calls this directly

Calls 12

pexpFunction · 0.85
ptanhFunction · 0.85
plgammaFunction · 0.85
perfFunction · 0.85
perfcFunction · 0.85
plogFunction · 0.85
psqrtFunction · 0.85
powFunction · 0.50
expFunction · 0.50
logFunction · 0.50
storeMethod · 0.45
loadMethod · 0.45

Tested by

no test coverage detected