12345678910111213141516171819202122232425262728 |
- #include "libm.h"
- double scalbn(double x, int n)
- {
- double scale;
- if (n > 1023) {
- x *= 0x1p1023;
- n -= 1023;
- if (n > 1023) {
- x *= 0x1p1023;
- n -= 1023;
- if (n > 1023)
- return x * 0x1p1023;
- }
- } else if (n < -1022) {
- x *= 0x1p-1022;
- n += 1022;
- if (n < -1022) {
- x *= 0x1p-1022;
- n += 1022;
- if (n < -1022)
- return x * 0x1p-1022;
- }
- }
- INSERT_WORDS(scale, (uint32_t)(0x3ff+n)<<20, 0);
- return x * scale;
- }
|