| 255 | } |
| 256 | |
| 257 | void test_basic_functions() |
| 258 | { |
| 259 | VERIFY_IS_EQUAL(static_cast<float>(numext::abs(bfloat16(3.5f))), 3.5f); |
| 260 | VERIFY_IS_EQUAL(static_cast<float>(abs(bfloat16(3.5f))), 3.5f); |
| 261 | VERIFY_IS_EQUAL(static_cast<float>(numext::abs(bfloat16(-3.5f))), 3.5f); |
| 262 | VERIFY_IS_EQUAL(static_cast<float>(abs(bfloat16(-3.5f))), 3.5f); |
| 263 | |
| 264 | VERIFY_IS_EQUAL(static_cast<float>(numext::floor(bfloat16(3.5f))), 3.0f); |
| 265 | VERIFY_IS_EQUAL(static_cast<float>(floor(bfloat16(3.5f))), 3.0f); |
| 266 | VERIFY_IS_EQUAL(static_cast<float>(numext::floor(bfloat16(-3.5f))), -4.0f); |
| 267 | VERIFY_IS_EQUAL(static_cast<float>(floor(bfloat16(-3.5f))), -4.0f); |
| 268 | |
| 269 | VERIFY_IS_EQUAL(static_cast<float>(numext::ceil(bfloat16(3.5f))), 4.0f); |
| 270 | VERIFY_IS_EQUAL(static_cast<float>(ceil(bfloat16(3.5f))), 4.0f); |
| 271 | VERIFY_IS_EQUAL(static_cast<float>(numext::ceil(bfloat16(-3.5f))), -3.0f); |
| 272 | VERIFY_IS_EQUAL(static_cast<float>(ceil(bfloat16(-3.5f))), -3.0f); |
| 273 | |
| 274 | VERIFY_IS_APPROX(static_cast<float>(numext::sqrt(bfloat16(0.0f))), 0.0f); |
| 275 | VERIFY_IS_APPROX(static_cast<float>(sqrt(bfloat16(0.0f))), 0.0f); |
| 276 | VERIFY_IS_APPROX(static_cast<float>(numext::sqrt(bfloat16(4.0f))), 2.0f); |
| 277 | VERIFY_IS_APPROX(static_cast<float>(sqrt(bfloat16(4.0f))), 2.0f); |
| 278 | |
| 279 | VERIFY_IS_APPROX(static_cast<float>(numext::pow(bfloat16(0.0f), bfloat16(1.0f))), 0.0f); |
| 280 | VERIFY_IS_APPROX(static_cast<float>(pow(bfloat16(0.0f), bfloat16(1.0f))), 0.0f); |
| 281 | VERIFY_IS_APPROX(static_cast<float>(numext::pow(bfloat16(2.0f), bfloat16(2.0f))), 4.0f); |
| 282 | VERIFY_IS_APPROX(static_cast<float>(pow(bfloat16(2.0f), bfloat16(2.0f))), 4.0f); |
| 283 | |
| 284 | VERIFY_IS_EQUAL(static_cast<float>(numext::exp(bfloat16(0.0f))), 1.0f); |
| 285 | VERIFY_IS_EQUAL(static_cast<float>(exp(bfloat16(0.0f))), 1.0f); |
| 286 | VERIFY_IS_APPROX(static_cast<float>(numext::exp(bfloat16(EIGEN_PI))), 20.f + static_cast<float>(EIGEN_PI)); |
| 287 | VERIFY_IS_APPROX(static_cast<float>(exp(bfloat16(EIGEN_PI))), 20.f + static_cast<float>(EIGEN_PI)); |
| 288 | |
| 289 | VERIFY_IS_EQUAL(static_cast<float>(numext::expm1(bfloat16(0.0f))), 0.0f); |
| 290 | VERIFY_IS_EQUAL(static_cast<float>(expm1(bfloat16(0.0f))), 0.0f); |
| 291 | VERIFY_IS_APPROX(static_cast<float>(numext::expm1(bfloat16(2.0f))), 6.375f); |
| 292 | VERIFY_IS_APPROX(static_cast<float>(expm1(bfloat16(2.0f))), 6.375f); |
| 293 | |
| 294 | VERIFY_IS_EQUAL(static_cast<float>(numext::log(bfloat16(1.0f))), 0.0f); |
| 295 | VERIFY_IS_EQUAL(static_cast<float>(log(bfloat16(1.0f))), 0.0f); |
| 296 | VERIFY_IS_APPROX(static_cast<float>(numext::log(bfloat16(10.0f))), 2.296875f); |
| 297 | VERIFY_IS_APPROX(static_cast<float>(log(bfloat16(10.0f))), 2.296875f); |
| 298 | |
| 299 | VERIFY_IS_EQUAL(static_cast<float>(numext::log1p(bfloat16(0.0f))), 0.0f); |
| 300 | VERIFY_IS_EQUAL(static_cast<float>(log1p(bfloat16(0.0f))), 0.0f); |
| 301 | VERIFY_IS_APPROX(static_cast<float>(numext::log1p(bfloat16(10.0f))), 2.390625f); |
| 302 | VERIFY_IS_APPROX(static_cast<float>(log1p(bfloat16(10.0f))), 2.390625f); |
| 303 | } |
| 304 | |
| 305 | void test_trigonometric_functions() |
| 306 | { |