【发布时间】:2018-06-13 07:54:53
【问题描述】:
我正在用 C 语言制作一组函数来模拟微正则集合(一个具有固定能量和体积的 N 个粒子的周期性边界框)。关键是我的主要功能之一是获取 2 个粒子之间的距离,有时即使粒子不是那么近,它也会返回 0。
功能是
// Determinar la mínima distancia dadas dos coordenadasy una longitud de caja periodica
float pdist(float x1, float y1, float x2, float y2, float a) {
float Dx = abs(x2-x1);
float Dy = abs(y2-y1);
if(Dx >a/2) Dx = a-Dx;
if(Dy >a/2) Dy = a-Dy;
return sqrt(pow(Dx,2)+pow(Dy,2));
}
如果您想查看所有代码,可以在 https://gitlab.com/jarr.tecn/statistical_mechanics
在文件box.h中 以及 ejemlo.h 中的一个示例
【问题讨论】:
-
你能给我们一个示例输入,它意外返回 0 吗?
-
if条件的部分应该做什么? -
您不应该使用
pow进行平方。使用sqrt(Dx*Dx + Dy*Dy) -
函数怎么调用?
-
为什么两个粒子之间的距离是
a的函数?
标签: c return-value numerical