Files
clang-p2996/libcxx/test/std/numerics/complex.number/complex.ops/scalar_divide_complex.pass.cpp
Nikolas Klauser 5aacf93a89 [libc++] Use _Complex for multiplication and division of complex floating point types (#83575)
This significantly simplifies the implementation and improves the
codegen. The only downside is that the accuracy can be marginally worse,
but that is up to the compiler to decide with this change, which means
it can be controlled by compiler flags.

Differential Revision: https://reviews.llvm.org/D155312
2024-07-05 11:25:59 +02:00

49 lines
1.1 KiB
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <complex>
// template<class T>
// complex<T>
// operator/(const T& lhs, const complex<T>& rhs); // constexpr in C++20
#include <complex>
#include <cassert>
#include "test_macros.h"
template <class T>
TEST_CONSTEXPR_CXX20
bool
test()
{
const T lhs(-8.5);
const std::complex<T> rhs(1.5, 2.5);
const std::complex<T> c = lhs / rhs;
assert(c.real() >= T(-1.500000000000001));
assert(c.real() <= T(-1.499999999999999));
assert(c.imag() >= T(2.499999999999999));
assert(c.imag() <= T(2.500000000000001));
return true;
}
int main(int, char**)
{
test<float>();
test<double>();
test<long double>();
#if TEST_STD_VER > 17
static_assert(test<float>());
static_assert(test<double>());
static_assert(test<long double>());
#endif
return 0;
}