0

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

=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

我究竟做错了什么?

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

4

2 回答 2

4

log例程是自然对数,以e为底,但您想要log10以 10 为底。

于 2013-07-25T18:45:12.643 回答
3

ints 只能是整数。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. For x18to be 4.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
于 2013-07-25T18:17:05.043 回答