⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geometricpredicates.cpp

📁 利用C
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#define Four_One_Product(a3, a2, a1, a0, b, x7, x6, x5, x4, x3, x2, x1, x0) \  Split(b, bhi, blo); \  Two_Product_Presplit(a0, b, bhi, blo, _i, x0); \  Two_Product_Presplit(a1, b, bhi, blo, _j, _0); \  Two_Sum(_i, _0, _k, x1); \  Fast_Two_Sum(_j, _k, _i, x2); \  Two_Product_Presplit(a2, b, bhi, blo, _j, _0); \  Two_Sum(_i, _0, _k, x3); \  Fast_Two_Sum(_j, _k, _i, x4); \  Two_Product_Presplit(a3, b, bhi, blo, _j, _0); \  Two_Sum(_i, _0, _k, x5); \  Fast_Two_Sum(_j, _k, x7, x6)#define Two_Two_Product(a1, a0, b1, b0, x7, x6, x5, x4, x3, x2, x1, x0) \  Split(a0, a0hi, a0lo); \  Split(b0, bhi, blo); \  Two_Product_2Presplit(a0, a0hi, a0lo, b0, bhi, blo, _i, x0); \  Split(a1, a1hi, a1lo); \  Two_Product_2Presplit(a1, a1hi, a1lo, b0, bhi, blo, _j, _0); \  Two_Sum(_i, _0, _k, _1); \  Fast_Two_Sum(_j, _k, _l, _2); \  Split(b1, bhi, blo); \  Two_Product_2Presplit(a0, a0hi, a0lo, b1, bhi, blo, _i, _0); \  Two_Sum(_1, _0, _k, x1); \  Two_Sum(_2, _k, _j, _1); \  Two_Sum(_l, _j, _m, _2); \  Two_Product_2Presplit(a1, a1hi, a1lo, b1, bhi, blo, _j, _0); \  Two_Sum(_i, _0, _n, _0); \  Two_Sum(_1, _0, _i, x2); \  Two_Sum(_2, _i, _k, _1); \  Two_Sum(_m, _k, _l, _2); \  Two_Sum(_j, _n, _k, _0); \  Two_Sum(_1, _0, _j, x3); \  Two_Sum(_2, _j, _i, _1); \  Two_Sum(_l, _i, _m, _2); \  Two_Sum(_1, _k, _i, x4); \  Two_Sum(_2, _i, _k, x5); \  Two_Sum(_m, _k, x7, x6)/* An expansion of length two can be squared more quickly than finding the   *//*   product of two different expansions of length two, and the result is    *//*   guaranteed to have no more than six (rather than eight) components.     */#define Two_Square(a1, a0, x5, x4, x3, x2, x1, x0) \  Square(a0, _j, x0); \  _0 = a0 + a0; \  Two_Product(a1, _0, _k, _1); \  Two_One_Sum(_k, _1, _j, _l, _2, x1); \  Square(a1, _j, _1); \  Two_Two_Sum(_j, _1, _l, _2, x5, x4, x3, x2)#ifndef USE_PREDICATES_INITstatic REAL splitter;     /* = 2^ceiling(p / 2) + 1.  Used to split floats in half. *//* A set of coefficients used to calculate maximum roundoff errors.          */static REAL resulterrbound;static REAL ccwerrboundA, ccwerrboundB, ccwerrboundC;static REAL o3derrboundA, o3derrboundB, o3derrboundC;static REAL iccerrboundA, iccerrboundB, iccerrboundC;static REAL isperrboundA, isperrboundB, isperrboundC;#endif /* USE_PREDICATES_INIT *//*****************************************************************************//*                                                                           *//*  doubleprint()   Print the bit representation of a double.                *//*                                                                           *//*  Useful for debugging exact arithmetic routines.                          *//*                                                                           *//*****************************************************************************//*void doubleprint(number)double number;{  unsigned long long no;  unsigned long long sign, expo;  int exponent;  int i, bottomi;  no = *(unsigned long long *) &number;  sign = no & 0x8000000000000000ll;  expo = (no >> 52) & 0x7ffll;  exponent = (int) expo;  exponent = exponent - 1023;  if (sign) {    printf("-");  } else {    printf(" ");  }  if (exponent == -1023) {    printf(      "0.0000000000000000000000000000000000000000000000000000_     (   )");  } else {    printf("1.");    bottomi = -1;    for (i = 0; i < 52; i++) {      if (no & 0x0008000000000000ll) {        printf("1");        bottomi = i;      } else {        printf("0");      }      no <<= 1;    }    printf("_%d  (%d)", exponent, exponent - 1 - bottomi);  }}*//*****************************************************************************//*                                                                           *//*  floatprint()   Print the bit representation of a float.                  *//*                                                                           *//*  Useful for debugging exact arithmetic routines.                          *//*                                                                           *//*****************************************************************************//*void floatprint(number)float number;{  unsigned no;  unsigned sign, expo;  int exponent;  int i, bottomi;  no = *(unsigned *) &number;  sign = no & 0x80000000;  expo = (no >> 23) & 0xff;  exponent = (int) expo;  exponent = exponent - 127;  if (sign) {    printf("-");  } else {    printf(" ");  }  if (exponent == -127) {    printf("0.00000000000000000000000_     (   )");  } else {    printf("1.");    bottomi = -1;    for (i = 0; i < 23; i++) {      if (no & 0x00400000) {        printf("1");        bottomi = i;      } else {        printf("0");      }      no <<= 1;    }    printf("_%3d  (%3d)", exponent, exponent - 1 - bottomi);  }}*//*****************************************************************************//*                                                                           *//*  expansion_print()   Print the bit representation of an expansion.        *//*                                                                           *//*  Useful for debugging exact arithmetic routines.                          *//*                                                                           *//*****************************************************************************//*void expansion_print(elen, e)int elen;REAL *e;{  int i;  for (i = elen - 1; i >= 0; i--) {    REALPRINT(e[i]);    if (i > 0) {      printf(" +\n");    } else {      printf("\n");    }  }}*//*****************************************************************************//*                                                                           *//*  doublerand()   Generate a double with random 53-bit significand and a    *//*                 random exponent in [0, 511].                              *//*                                                                           *//*****************************************************************************//*static double doublerand(){  double result;  double expo;  long a, b, c;  long i;  a = random();  b = random();  c = random();  result = (double) (a - 1073741824) * 8388608.0 + (double) (b >> 8);  for (i = 512, expo = 2; i <= 131072; i *= 2, expo = expo * expo) {    if (c & i) {      result *= expo;    }  }  return result;}*//*****************************************************************************//*                                                                           *//*  narrowdoublerand()   Generate a double with random 53-bit significand    *//*                       and a random exponent in [0, 7].                    *//*                                                                           *//*****************************************************************************//*static double narrowdoublerand(){  double result;  double expo;  long a, b, c;  long i;  a = random();  b = random();  c = random();  result = (double) (a - 1073741824) * 8388608.0 + (double) (b >> 8);  for (i = 512, expo = 2; i <= 2048; i *= 2, expo = expo * expo) {    if (c & i) {      result *= expo;    }  }  return result;}*//*****************************************************************************//*                                                                           *//*  uniformdoublerand()   Generate a double with random 53-bit significand.  *//*                                                                           *//*****************************************************************************//*static double uniformdoublerand(){  double result;  long a, b;  a = random();  b = random();  result = (double) (a - 1073741824) * 8388608.0 + (double) (b >> 8);  return result;}*//*****************************************************************************//*                                                                           *//*  floatrand()   Generate a float with random 24-bit significand and a      *//*                random exponent in [0, 63].                                *//*                                                                           *//*****************************************************************************//*static float floatrand(){  float result;  float expo;  long a, c;  long i;  a = random();  c = random();  result = (float) ((a - 1073741824) >> 6);  for (i = 512, expo = 2; i <= 16384; i *= 2, expo = expo * expo) {    if (c & i) {      result *= expo;    }  }  return result;}*//*****************************************************************************//*                                                                           *//*  narrowfloatrand()   Generate a float with random 24-bit significand and  *//*                      a random exponent in [0, 7].                         *//*                                                                           *//*****************************************************************************//*static float narrowfloatrand(){  float result;  float expo;  long a, c;  long i;  a = random();  c = random();  result = (float) ((a - 1073741824) >> 6);  for (i = 512, expo = 2; i <= 2048; i *= 2, expo = expo * expo) {    if (c & i) {      result *= expo;    }  }  return result;}*//*****************************************************************************//*                                                                           *//*  uniformfloatrand()   Generate a float with random 24-bit significand.    *//*                                                                           *//*****************************************************************************//*static float uniformfloatrand(){  float result;  long a;  a = random();  result = (float) ((a - 1073741824) >> 6);  return result;}*//*****************************************************************************//*                                                                           *//*  fast_expansion_sum_zeroelim()   Sum two expansions, eliminating zero     *//*                                  components from the output expansion.    *//*                                                                           */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -