Objective-C中计算方程式的问题



我正试图在我的程序中求解这个公式:

=10^(-1*(107.8871+0.03252849*297-5151.79/297-38.92561*log(297)+563713.9/297^2))

最后我应该得到的正确答案是4.58E-11,不幸的是,这不是我得到的,这就是我编程的方式:

int X19 = pow(10, (-1*(107.8871+0.03252849*297-5151.79/297-38.92561* log(297)+563713.9/pow(297, 2))));

但当我运行程序时得到的答案是:-2147483648

我做错了什么?

EDIT=在代表我更改了明显的错误,将的类型更改为double而不是int之后,我的新答案现在是=10948824009217039033385554100376102490822180576034479094375076006115616972742335036083272081670698970658879817383936.000000,这仍然不是我的答案,任何其他

log例程是一个自然对数,以e为底,但您需要以10为底的log10

int s只能是整数。4.58E-110.0000000000458,所以应该使用浮点或定点十进制数据类型。如果您可以接受舍入错误的可能性(无论如何,浮点文字都可能会出现这种情况),那么您可以简单地使用double数据类型而不是int

然而,这并没有考虑溢出的可能性或数据存储限制的其他问题。请注意,当格式更改为双精度时,结果仍然不是您想要的:http://ideone.com/PMoyJA(我明白了,你已经注意到了。)然而,这似乎不是数据类型的问题,而是你的等式的问题;我敢肯定你的运算顺序是错误的,或者你的方程在其他方面是错误的。使用以下任务:

double x8 = 0.03252849 * 297; // 9.660962
double x9 = 107.8871 + x8; // 117.548062
double x10 = 5151.79 / 297; // 17.346094
double x11 = x9 - x10; // 100.201967
double x12 = log(297); // 5.693732
double x13 = 38.92561 * x12; // 221.631997
double x14 = x11 - x13; // -121.430029
double x15 = pow(297, 2); // 88209.000000
double x16 = 563713.9 / x15; // 6.390662
double x17 = -(x14 + x16); // 115.039367
double x18 = pow(10, x17); // 10948824009217039033385554100376102490822180576034479094375076006115616972742335036083272081670698970658879817383936.000000
  1. 若要使x184.58E-11,则x17必须等于-23.80673702480841,而不是115.039367
  2. 作为x17 = -(x14 + x16),这意味着x14 == -x17 - x16 == 23.80673702480841-563713.9/pow(297, 2) == 17.4160750742138,而不是-121.430029
  3. 作为x14 = x11 -x13 == x11 - 38.92561*log(297),这意味着x11 == 17.4160750742138 + 38.92561*log(297) == 239.04807175371357,而不是100.201967
  4. x11 = x9 - x10->x9 == x11 + 5151.79 / 297 == 239.04807175371357 + 5151.79 / 297 == 256.3941660298078,而非117.548062
  5. x9 = 107.8871 + x8->x8 == x9 - 107.8871 == 256.3941660298078 - 107.8871 == 148.50706602980782,而不是9.660962

最新更新