在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个二进制数字?
我想匹配头部与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)
为什么第二种解决方案不起作用?我怎样才能使它工作?
我正在尝试创建一个条件表达式来初始化一些函数,变量等.在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中没有任何内容被初始化或计算.那么,我该怎样做才能获得有条件的"编译"?