Я хочу закодировать некоторые функции моей программы Matlab в c, чтобы сделать это быстрее.
Но эта функция не возвращает результат выражения. Он возвращает другое значение, например 29.
Без вызова функции (говоря о размещении выражения внутри функции в том месте, где я вызываю функцию) она работает.
даже внутри функции результат выражения верен, но не после возврата ...
…
double distance = 0;
// function call
distance = distpos(position[0], position[1], *(origin), *(origin+1));
printf("%f", distance); // incorrect
…
// funktion
double distpos(double x1, double y1, double x2, double y2)
{
printf("%f", sqrt(pow((x1 - x2),2) + pow((y1 - y2),2))); // correct
return sqrt(pow((x1 - x2),2) + pow((y1 - y2),2));
}
// РЕДАКТИРОВАТЬ ------
Я использую Matlab 7.3.0 (R2006b).
Следующий код не работает:
#include <stdio.h>
#include <math.h>
#include "mex.h"
void main()
{
double position[2] = { 5, 6 };
double origin[2] = { 3, 4 };
double distance = 0;
// function call
distance = distpos(position[0], position[1], *(origin), *(origin+1));
printf("%f\n", distance); // incorrect
}
// funktion
double distpos(double x1, double y1, double x2, double y2)
{
printf("%f\n", sqrt(pow((x1 - x2),2) + pow((y1 - y2),2))); // correct
return sqrt(pow((x1 - x2),2) + pow((y1 - y2),2));
}
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
main();
}
Результат:
2,828427
639,000000
Этот код работает:
#include <stdio.h>
#include <math.h>
#include "mex.h"
// funktion
double distpos(double x1, double y1, double x2, double y2)
{
printf("%f\n", sqrt(pow((x1 - x2),2) + pow((y1 - y2),2))); // correct
return sqrt(pow((x1 - x2),2) + pow((y1 - y2),2));
}
void main()
{
double position[2] = { 5, 6 };
double origin[2] = { 3, 4 };
double distance = 0;
// function call
distance = distpos(position[0], position[1], *(origin), *(origin+1));
printf("%f\n", distance); // incorrect
}
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
main();
}
Результат:
2,828427
2,828427
Это значит:
Существует разница, если функция объявлена до или после использования.
(Я уже знаю, что вы должны объявить функцию, прежде чем использовать ее, но вы не должны)