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

📄 validate.c

📁 任意精度的数学库
💻 C
📖 第 1 页 / 共 3 页
字号:
xarray[8]  = 6.319e-6;      yarray[8]  = 3.17;xarray[9]  = 2.108e9;       yarray[9]  = -2.0;xarray[10] = 8.417e-3;      yarray[10] = 0.5;xarray[11] = 5.347e7;       yarray[11] = 1.0;xarray[12] = 10.0;          yarray[12] = -17.0;xarray[13] = 10.0;          yarray[13] = 2.33e1;xarray[14] = 9.0e2;         yarray[14] = 0.0;xarray[15] = 2.0;           yarray[15] = -3.62;for (i=1; i <= 15; i++)       {   xx1 = xarray[i];   xx2 = yarray[i];   yy  = pow(xx1, xx2);                  m_apm_set_double(aa_mapm, xx1);   m_apm_set_double(bb_mapm, xx2);   m_apm_pow(cc_mapm, DECIMAL_PLACES, aa_mapm, bb_mapm);   m_apm_to_string(buffer, DECIMAL_PLACES, cc_mapm);   yy_mapm_lib = atof(buffer);                  ydiff = (yy_mapm_lib - yy) / yy;                  if (fabs(ydiff) > tolerance)     {      pass = FALSE;      total_pass = FALSE;                  fprintf(stdout,      "x1 = %10.3E  x2 = %10.3E  C-math-lib = %.15E \n",xx1,xx2,yy);       fprintf(stdout,      "DIFF = %17.10E          M_APM_LIB  = %s \n",ydiff,buffer);     }  }if (pass)  fprintf(stdout,"... POW function passes\n");  /* * */numdigits = 70;fprintf(stdout,   "\nVerify Some Known Quantities to 70 Digits ...\n");m_apm_sqrt(ee_mapm, (numdigits + 4), MM_Two);m_apm_divide(dd_mapm, (numdigits + 4), ee_mapm, MM_Two);m_apm_round(aa_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"SQRT(2) / 2 = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 4L);m_apm_divide(dd_mapm, (numdigits + 4), MM_PI, ee_mapm);m_apm_sin(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"SIN(PI / 4) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: SQRT(2) / 2 == SIN(PI / 4)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: SQRT(2) / 2 != SIN(PI / 4)\n");  }m_apm_cos(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"COS(PI / 4) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: SQRT(2) / 2 == COS(PI / 4)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: SQRT(2) / 2 != COS(PI / 4)\n");  }m_apm_set_string(aa_mapm, "0.5");m_apm_set_long(ee_mapm, 6L);m_apm_divide(dd_mapm, (numdigits + 4), MM_PI, ee_mapm);m_apm_sin(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"\n");fprintf(stdout,"SIN(PI / 6) = [%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: SIN(PI / 6) == 0.5\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: SIN(PI / 6) != 0.5\n");  }m_apm_set_string(ee_mapm, "0.75");m_apm_sqrt(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"SQRT(0.75) = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 6L);m_apm_divide(dd_mapm, (numdigits + 4), MM_PI, ee_mapm);m_apm_cos(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"COS(PI / 6) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: COS(PI / 6) == SQRT(0.75)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: COS(PI / 6) != SQRT(0.75)\n");  }m_apm_set_string(ee_mapm, "3");m_apm_sqrt(dd_mapm, (numdigits + 4), ee_mapm);m_apm_add(ee_mapm, MM_Two, dd_mapm);m_apm_round(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"2 + SQRT(3) = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 5L);m_apm_set_long(dd_mapm, 12L);m_apm_multiply(cc_mapm, MM_PI, ee_mapm);m_apm_divide(ee_mapm, (numdigits + 4), cc_mapm, dd_mapm);m_apm_tan(bb_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"TAN(5 * PI / 12) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: TAN(5 * PI / 12) == 2 + SQRT(3)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: TAN(5 * PI / 12) != 2 + SQRT(3)\n");  }m_apm_set_string(ee_mapm, "0.5");m_apm_arcsin(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"ARC-SIN(0.5) = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 6L);m_apm_divide(dd_mapm, (numdigits + 4), MM_PI, ee_mapm);m_apm_round(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"PI / 6 = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: ARC-SIN(0.5) == PI / 6\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: ARC-SIN(0.5) != PI / 6\n");  }m_apm_set_string(ee_mapm, "0.75");m_apm_sqrt(dd_mapm, (numdigits + 4), ee_mapm);m_apm_arccos(aa_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"ARC-COS(SQRT(0.75)) = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 6L);m_apm_divide(dd_mapm, (numdigits + 4), MM_PI, ee_mapm);m_apm_round(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"PI / 6 = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: ARC-COS(SQRT(0.75)) == PI / 6\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: ARC-COS(SQRT(0.75)) != PI / 6\n");  }m_apm_arctan(aa_mapm, numdigits, MM_One);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"ARC-TAN(1.0) = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 4L);m_apm_divide(dd_mapm, (numdigits + 4), MM_PI, ee_mapm);m_apm_round(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"PI / 4 = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: ARC-TAN(1.0) == PI / 4\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: ARC-TAN(1.0) != PI / 4\n");  }m_apm_exp(aa_mapm, numdigits, MM_One);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"EXP(1.0) = \n[%s]\n",buffer);m_apm_round(bb_mapm, numdigits, MM_E);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"E = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: EXP(1.0) == E\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: EXP(1.0) != E\n");  }m_apm_set_string(ee_mapm, "0.5");m_apm_exp(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"EXP(0.5) = \n[%s]\n",buffer);m_apm_sqrt(bb_mapm, numdigits, MM_E);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"SQRT(E) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: EXP(0.5) == SQRT(E)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: EXP(0.5) != SQRT(E)\n");  }m_apm_copy(ee_mapm, MM_One);for (i=1; i <= 15; i++)  {   m_apm_multiply(dd_mapm, ee_mapm, MM_E);   m_apm_copy(ee_mapm, dd_mapm);  }m_apm_round(bb_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"\n");fprintf(stdout,"E ^ 15 = \n[%s]\n",buffer);m_apm_set_string(ee_mapm, "15.0");m_apm_exp(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"EXP(15) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: EXP(15) == E ^ 15\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: EXP(15) != E ^ 15\n");  }m_apm_integer_pow(cc_mapm, numdigits, MM_E, 15);m_apm_to_string(buffer, -1, cc_mapm);fprintf(stdout,"\n");fprintf(stdout,"INTEGER_POW (E^15) = \n[%s]\n",buffer);k = m_apm_compare(bb_mapm, cc_mapm);if (k == 0)   fprintf(stdout,"PASS: INTEGER_POW E ^15 == E ^ 15\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: INTEGER_POW E ^15 != E ^ 15\n");  }m_apm_copy(ee_mapm, MM_One);for (i=1; i <= 26; i++)  {   m_apm_multiply(dd_mapm, ee_mapm, MM_PI);   m_apm_copy(ee_mapm, dd_mapm);  }m_apm_divide(dd_mapm, (numdigits + 8), MM_One, ee_mapm);m_apm_round(bb_mapm, numdigits, dd_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"\n");fprintf(stdout,"1 / (PI ^ 26) = \n[%s]\n",buffer);m_apm_integer_pow(cc_mapm, numdigits, MM_PI, -26);m_apm_to_string(buffer, -1, cc_mapm);fprintf(stdout,"INTEGER_POW (PI ^ -26) = \n[%s]\n",buffer);k = m_apm_compare(bb_mapm, cc_mapm);if (k == 0)   fprintf(stdout,"PASS: INTEGER_POW PI ^ -26 == PI ^ -26\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: INTEGER_POW PI ^ -26 != PI ^ -26\n");  }m_apm_multiply(ee_mapm, MM_E, MM_E);m_apm_round(bb_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"\n");fprintf(stdout,"E ^ 2 = \n[%s]\n",buffer);m_apm_exp(aa_mapm, numdigits, MM_Two);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"EXP(2) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: EXP(2) == E ^ 2\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: EXP(2) != E ^ 2\n");  }m_apm_copy(ee_mapm, MM_One);for (i=1; i <= 13; i++)  {   m_apm_multiply(dd_mapm, ee_mapm, MM_E);   m_apm_copy(ee_mapm, dd_mapm);  }m_apm_sqrt(dd_mapm, (numdigits + 4), ee_mapm);m_apm_divide(ee_mapm, (numdigits + 4), MM_One, dd_mapm);m_apm_round(bb_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"\n");fprintf(stdout,"1 / SQRT(E ^ 13) = \n[%s]\n",buffer);m_apm_set_string(ee_mapm, "-6.5");m_apm_exp(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"EXP(-6.5) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: EXP(-6.5) == 1 / SQRT(E ^ 13)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: EXP(-6.5) != 1 / SQRT(E ^ 13)\n");  }m_apm_copy(ee_mapm, MM_One);for (i=1; i <= 85; i++)  {   m_apm_multiply(dd_mapm, ee_mapm, MM_E);   m_apm_round(ee_mapm, (numdigits + 4), dd_mapm);  }m_apm_sqrt(bb_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"\n");fprintf(stdout,"SQRT(E ^ 85) = \n[%s]\n",buffer);m_apm_set_string(ee_mapm, "42.5");m_apm_exp(aa_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"EXP(42.5) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: EXP(42.5) == SQRT(E ^ 85)\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: EXP(42.5) != SQRT(E ^ 85)\n");  }m_apm_round(aa_mapm, numdigits, MM_LOG_10_BASE_E);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"LOG_10_BASE_E = \n[%s]\n",buffer);m_apm_log(bb_mapm, numdigits, MM_Ten);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"LOG(10) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: LOG(10) == LOG_10_BASE_E\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: LOG(10) != LOG_10_BASE_E\n");  }m_apm_round(aa_mapm, numdigits, MM_LOG_E_BASE_10);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"LOG_E_BASE_10 = \n[%s]\n",buffer);m_apm_log10(bb_mapm, numdigits, MM_E);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"LOG10(E) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: LOG10(E) == LOG_E_BASE_10\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: LOG10(E) != LOG_E_BASE_10\n");  }m_apm_round(aa_mapm, numdigits, MM_LOG_2_BASE_E);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"LOG_2_BASE_E = \n[%s]\n",buffer);m_apm_log(bb_mapm, numdigits, MM_Two);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"LOG(2) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: LOG(2) == LOG_2_BASE_E\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: LOG(2) != LOG_2_BASE_E\n");  }m_apm_round(aa_mapm, numdigits, MM_LOG_3_BASE_E);m_apm_to_string(buffer, -1, aa_mapm);fprintf(stdout,"\n");fprintf(stdout,"LOG_3_BASE_E = \n[%s]\n",buffer);m_apm_set_long(ee_mapm, 3L);m_apm_log(bb_mapm, numdigits, ee_mapm);m_apm_to_string(buffer, -1, bb_mapm);fprintf(stdout,"LOG(3) = \n[%s]\n",buffer);k = m_apm_compare(aa_mapm, bb_mapm);if (k == 0)   fprintf(stdout,"PASS: LOG(3) == LOG_3_BASE_E\n");else  {   total_pass = FALSE;   fprintf(stdout,"FAIL: LOG(3) != LOG_3_BASE_E\n");  }if (total_pass)  fprintf(stdout,"\nvalidate : PASS\n\n");else  fprintf(stdout,"\nvalidate : FAIL\n\n");m_apm_free(aa_mapm);m_apm_free(bb_mapm);m_apm_free(cc_mapm);m_apm_free(dd_mapm);m_apm_free(ee_mapm);free(num1);free(num2);free(answer);exit(0);}

⌨️ 快捷键说明

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