当'时,C函数返回0;T

当'时,C函数返回0;T,c,return-value,numerical,C,Return Value,Numerical,我正在用C语言制作一组函数来模拟一个微非线性的ensamble(一个由N个具有固定能量和体积的粒子组成的周期有界盒)。关键是我的一个主要函数是获取两个粒子之间的距离,并且有时它返回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

我正在用C语言制作一组函数来模拟一个微非线性的ensamble(一个由N个具有固定能量和体积的粒子组成的周期有界盒)。关键是我的一个主要函数是获取两个粒子之间的距离,并且有时它返回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));
}
如果您想查看所有代码,可以在中查看

在文件框中 在ejempo.h中的一个示例中,问题来自返回整数的函数:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

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));
}

float pdist2(float x1, float y1, float x2, float y2, float a) {
    float Dx = fabsf(x2-x1);
    float Dy = fabsf(y2-y1);
    if(Dx >a/2) Dx = a-Dx;
    if(Dy >a/2) Dy = a-Dy;
    return sqrt(pow(Dx,2)+pow(Dy,2));
 }

int main(void)
{
    printf("first form: %f\n", pdist(.1, .1, .2, .2, .5));
    printf("second form: %f\n", pdist2(.1, .1, .2, .2, .5));
}

您能否给我们一个输入示例,其中它意外返回0?如果条件为的部分应该做什么?您不应该使用pow进行平方运算。使用
sqrt(Dx*Dx+Dy*Dy)
如何调用该函数?为什么两个粒子之间的距离是
a的函数?
first form: 0.000000
second form: 0.141421