相关疑难解决方法(0)

Mathematica中是否存在"正常"的EqualQ功能?

Equal我们阅读的文档页面上

如果机器精度或更高的近似数字最多与它们的最后七位二进制数字(大致是它们的最后两位小数位)不同,则认为它们是相等的.

以下是示例(32位系统;对于64位系统,在中间添加一些零):

In[1]:= 1.0000000000000021 == 1.0000000000000022
1.0000000000000021 === 1.0000000000000022

Out[1]= True

Out[2]= True
Run Code Online (Sandbox Code Playgroud)

我想知道Mathematica中的Equal函数的"正常"模拟是否会丢弃最后7个二进制数字?

wolfram-mathematica

10
推荐指数
5
解决办法
816
查看次数

匹配头部不同于某些模式

我想匹配头部与f不同的表达.

这有效

[In]  !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
Run Code Online (Sandbox Code Playgroud)

但不是这个

 [In]  MatchQ[t[3], x_ /; Head[x] != f]
 [Out] False
Run Code Online (Sandbox Code Playgroud)

为什么第二种解决方案不起作用?我怎样才能使它工作?

wolfram-mathematica

5
推荐指数
1
解决办法
222
查看次数

Mathematica:有条件的"编译"

我正在尝试创建一个条件表达式来初始化一些函数,变量等.在C中看起来像这样的东西:

#if option==1
  int foo(int x){/*some code here*/}
  int q=10;
#else
  char foo(int x){/*some other code*/}
  double q=3.141592;
#endif
use_q(q);
f(some_var);
Run Code Online (Sandbox Code Playgroud)

在Mathematica中,我尝试过使用If,像这样:

If[option==1,
foo[x_]=some_expression1;
q=10;
,
foo[x_]=some_expression2;
q=3.141592;
]
use_q[q];
f[some_var];
Run Code Online (Sandbox Code Playgroud)

但结果是函数的参数被涂成红色,并且在If中没有任何内容被初始化或计算.那么,我该怎样做才能获得有条件的"编译"?

wolfram-mathematica conditional-compilation

0
推荐指数
1
解决办法
323
查看次数