我在C中实现了一个使用浮点数的算法.当我在i386上编译并运行时,我得到的结果与我在armel上编译和运行时获得的结果不同.特别是按浮点数划分,会产生不同的浮点数.
我从算法中提取了一些代码来演示这个问题:
#include <stdio.h>
void main(void)
{
float x = 4.80000019;
float y = 4.80000019;
int a = 38000;
int b = 10000;
int result = (a/x)+(b/y);
printf("%.8f, %.8f\n", x, y); // same on i386 and armel
printf("%f, %f\n", a/x, b/y); // slightly different on each
printf("%d\n", result); // prints 9999 on i386, and 10000 on armel
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么这两个平台产生不同的结果?
亚历克斯
R 何时评估formula传递给lm(). 例如:
tmp <- rnorm(1000)
y <- rnorm(1000) + tmp
df = data.frame(x=tmp)
lm(y~x, data=df)$coefficients
Run Code Online (Sandbox Code Playgroud)
回报
(Intercept) x
0.01713098 0.98073687
Run Code Online (Sandbox Code Playgroud)
这表明在控制权传递后y~x进行评估,因为调用上下文中没有变量。但是,它还建议在控制权传递给之前对其进行评估,因为 中没有列。lm()xlm()ydf
在大多数语言中,参数在向下传递到堆栈之前会被完全评估。我可能在这里遗漏了一些微妙的东西。任何帮助,将不胜感激。