Ruby  2.7.1p83(2020-03-31revisiona0c7c23c9cec0d0ffcba012279cd652d28ad5bf3)
signbit.c
Go to the documentation of this file.
1 #include <limits.h>
2 #include "ruby.h"
3 
4 int
5 signbit(double x)
6 {
7  enum {double_per_long = sizeof(double) / sizeof(long)};
8  enum {long_msb = sizeof(long) * CHAR_BIT - 1};
9  union {double d; unsigned long i[double_per_long];} u;
10  unsigned long l;
11 
12  u.d = x;
13 #ifdef WORDS_BIGENDIAN
14  l = u.i[0];
15 #else
16  l = u.i[double_per_long - 1];
17 #endif
18  return (int)(l >> long_msb);
19 }
i
uint32_t i
Definition: rb_mjit_min_header-2.7.1.h:5464
long
#define long
Definition: rb_mjit_min_header-2.7.1.h:2880
double
double
Definition: rb_mjit_min_header-2.7.1.h:5923
CHAR_BIT
#define CHAR_BIT
Definition: ruby.h:227
ruby.h
signbit
int signbit(double x)
Definition: signbit.c:5