如何在一段时间内重新分配一个变量值?
嗨,我不知道这个主题是否是合适的术语....但是我正在尝试这样做:
我必须在一段时间内重新计算变量“x ”,直到它等于相同的“x ”
我在autolisp和c++中包含了类似的代码,以供参考。
为什么在autolisp的函数中得不到相同的结果?
谢谢。
//(while (not (equal x
// (setq x
// (*
// x
// (1+ (/ (- (* x y) (sin x)) (- (* x (cos x)) (sin x))))))
// 0.00001)))
// here is what I want to verify and if my code is right ?
while (!equal_real(x, x=(x * ((((x * y) - sin(x)) / ((x * cos(x)) - sin(x))) + 1)), 0.00001))
//(setq r (/ larc (* 2 (abs x)))
// fle (- r (sqrt (- (expt r 2) (expt (/ lc 2) 2)))))
r = ((2 * fabs(x)) / larc);
fle = (r - sqrt((pow(r, 2) - pow((lc / 2), 2))));
**** Hidden Message ***** 我认为这是因为范围。
(OBTW,对我来说现在是凌晨,我还没有完全睁开眼睛,所以要小心这篇文章。)
我认为你必须使用指针。
顺便说一句,这个代码真让我头疼。
w00t!咖啡煮好了,我已经喝了半杯了!(我现在可以尝试用更智慧的方式回答你。- *Pttthhht,我“聪明”,我不管你是谁,真搞笑!)
当您将var传递给过程时,您是在按值传递。所以当你试图通过另一个过程来改变主过程中的变量时,你需要在你的支持过程中使用指针或者引用来改变这个变量。
我的编程方法是使用更通用的支持程序格式。如果可能的话,我使用程序来“测试”并且从不“改变”数据。然而,由于lisp处理变量作用域的方式,在主过程之外改变变量有时会是一个很好且方便的技巧。
我看了一下代码,并发回了结果... 根据以下代码片段的结果,我认为正在发生的事情是赋值在进行比较之前发生,因此条件始终为真。如果您考虑一下,情况会是这样,这是合乎逻辑的。赋值(x=x*y)必须在任何事情都可以与其结果进行比较之前发生。
#include
#include
using namespace std;
int main(int argc, char *argv[]) {
float x = 1.0;
float y = 0.1;
while(x != (x = x * y)) {
y += 0.1;
}
cout
#include
#include
using namespace std;
int main(int argc, char *argv[]) {
float x = 1.0;
float y = 0.1;
for( ; ; ) {
float xPrime = x * y;
if(fabs(x - xPrime) < 0.00001)
break;
x = xPrime;
y += 0.1;
}
cout << "x == " << x << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
下面是equal_real函数代码3]
我需要迭代来找到(x)的值 让代码工作,这是我最终使用的内容:
ads_real xPrime;
for( ; ; ) {
xPrime = (x * ((((x * y) - sin(x)) / ((x * cos(x)) - sin(x))) + 1));
if(fabs(x - xPrime) < 0.00001)
break;
x=xPrime;
}
//(setq r (/ larc (* 2 (abs x)))
// fle (- r (sqrt (- (expt r 2) (expt (/ lc 2) 2)))))
r = (larc / (2 * fabs(x)));
fle = r - sqrt((pow(r,2) - pow(lc/2,2)));
// print value - test only
//acdbRToS(fle, 2, 3, fmtval);
//acutPrintf("FLE value is %s\n", fmtval);
另外,我在以下行上犯了一个错误:
r = ((2 * fabs(x)) / larc);
并且应该像这样:
r = (larc / (2 * fabs(x)));
一个小的计算,最终给了我X和Y的-1.#IND00000000000值....不好
谢谢查克,为路易斯使用的观点
不客气。我很高兴你明白了。
我仍然,有括号抽搐....并继续在数值计算中使用它们,在最新的代码中,我避免了它们......
即
larc/r*180
代替 [即使它们可以毫无问题地使用a]
((larc / r) * 180)
页:
[1]