小编Ale*_*rtt的帖子

C浮动操作在i386和arm上有不同的结果,但为什么呢?

我在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)

任何人都可以解释为什么这两个平台产生不同的结果?

亚历克斯

c floating-point arm

4
推荐指数
1
解决办法
1366
查看次数

R 何时将操作数计算为 ~

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

在大多数语言中,参数在向下传递到堆栈之前会被完全评估。我可能在这里遗漏了一些微妙的东西。任何帮助,将不胜感激。

r

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

标签 统计

arm ×1

c ×1

floating-point ×1

r ×1