|
nsz |
0c7d46 |
#include "test.h"
|
|
nsz |
0c7d46 |
#include <math.h>
|
|
nsz |
0c7d46 |
#include <stdint.h>
|
|
nsz |
0c7d46 |
#include <fenv.h>
|
|
nsz |
0c7d46 |
#include <stdio.h>
|
|
nsz |
0c7d46 |
#include <float.h>
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
static struct {
|
|
nsz |
0c7d46 |
double x;
|
|
nsz |
0c7d46 |
int n;
|
|
nsz |
0c7d46 |
double y;
|
|
nsz |
0c7d46 |
} t[] = {
|
|
nsz |
0c7d46 |
0.0, 0, 0.0,
|
|
nsz |
0c7d46 |
-0.0, 0, -0.0,
|
|
nsz |
0c7d46 |
0.0, -1234567, 0.0,
|
|
nsz |
0c7d46 |
-0.0, 1234567, -0.0,
|
|
nsz |
0c7d46 |
0x1.234p0, 13, 0x1.234p13,
|
|
nsz |
0c7d46 |
0x1.234p0, -13, 0x1.234p-13,
|
|
nsz |
0c7d46 |
-0x1.234p1, 137, -0x1.234p138,
|
|
nsz |
0c7d46 |
-0x1.234p1, -137, -0x1.234p-136,
|
|
nsz |
0c7d46 |
0x1.234p1023, 1, INFINITY,
|
|
nsz |
0c7d46 |
0x1.234p1023, -1022, 0x1.234p1,
|
|
nsz |
0c7d46 |
0x1.234p1023, -1023, 0x1.234p0,
|
|
nsz |
0c7d46 |
0x1.234p1023, -1024, 0x1.234p-1,
|
|
nsz |
0c7d46 |
0x1.234p1023, -2023, 0x1.234p-1000,
|
|
nsz |
0c7d46 |
0x1.234p1023, -2045, 0x1.234p-1022,
|
|
nsz |
0c7d46 |
0x1.234p1023, -2046, 0x1.234p-1023,
|
|
nsz |
0c7d46 |
0x1.234p1023, -2048, 0x1.234p-1025,
|
|
nsz |
0c7d46 |
0x1.234p1023, -2049, 0x1.234p-1026,
|
|
nsz |
0c7d46 |
0x1p1023, -2096, 0x1p-1073,
|
|
nsz |
0c7d46 |
0x1p1023, -2097, 0x1p-1074,
|
|
nsz |
0c7d46 |
0x1p1023, -2098, 0,
|
|
nsz |
0c7d46 |
0x1.234p-1022, 1022, 0x1.234p0,
|
|
nsz |
0c7d46 |
0x1.234p-1022, 2045, 0x1.234p1023,
|
|
nsz |
0c7d46 |
0x1p-1074, 2097, 0x1p1023,
|
|
nsz |
0c7d46 |
0x1p-1074, 2098, INFINITY,
|
|
nsz |
0c7d46 |
0x1p-1074, 1, 0x1p-1073,
|
|
nsz |
0c7d46 |
0x1p-1073, -1, 0x1p-1074,
|
|
nsz |
0c7d46 |
0x1p-1074, -1, 0,
|
|
nsz |
0c7d46 |
};
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
void test_scalbn()
|
|
nsz |
0c7d46 |
{
|
|
nsz |
0c7d46 |
int i;
|
|
nsz |
0c7d46 |
double y;
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
for (i = 0; i < sizeof t/sizeof *t; i++) {
|
|
nsz |
0c7d46 |
y = scalbn(t[i].x, t[i].n);
|
|
nsz |
0c7d46 |
if (y != t[i].y)
|
|
nsz |
0c7d46 |
error("scalbn(%a,%d) want %a got %a\n", t[i].x, t[i].n, t[i].y, y);
|
|
nsz |
0c7d46 |
}
|
|
nsz |
0c7d46 |
}
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
void bench_scalbn_simple(int N)
|
|
nsz |
0c7d46 |
{
|
|
nsz |
0c7d46 |
int i;
|
|
nsz |
0c7d46 |
volatile double y;
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
for (i = 0; i < N; i++) {
|
|
nsz |
0c7d46 |
y = scalbn(1.25, 73);
|
|
nsz |
0c7d46 |
}
|
|
nsz |
0c7d46 |
}
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
void bench_scalbn_hard(int N)
|
|
nsz |
0c7d46 |
{
|
|
nsz |
0c7d46 |
int i;
|
|
nsz |
0c7d46 |
volatile double y;
|
|
nsz |
0c7d46 |
|
|
nsz |
0c7d46 |
for (i = 0; i < N; i++) {
|
|
nsz |
0c7d46 |
y = scalbn(0x1.23p-1050, 2070);
|
|
nsz |
0c7d46 |
}
|
|
nsz |
0c7d46 |
}
|