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

时间:2013-07-25 18:15:50

标签: objective-c math

我正在尝试在我的程序中解决这个公式:

=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

我做错了什么?

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

2 个答案:

答案 0 :(得分:4)

log例程是一个自然对数,其基数为 e ,但你需要log10,基数为10。

答案 1 :(得分:3)

int s只能是整数。 4.58E-110.0000000000458,因此您应该使用浮点或定点十进制数据类型。如果您对舍入错误的可能性感到满意(无论如何您可能会使用浮点文字),那么您只需使用double数据类型而不是int

但是,这并没有考虑到数据存储限制出现溢出或其他问题的可能性。请注意,当格式更改为double时,结果仍然不是您想要的结果: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-11x17必须等于-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