Sign in to follow this  
Followers 0
Dworkin

Результат вычитания аргументов в функции выдает нереальные числа

Рекомендованные сообщения



Не найдено.

4 posts in this topic

Всем привет. Вычитаю аргументы в функции и получаю нереальные числа.

#include <a_samp>
stock v_sub(v1[2], v2[2]) 
{ 
  	//Для теста выведем числа аргументов и убедимся что они нормальные 
	printf("v1 in func: %f, %f", v1[0], v1[1]);
  	printf("v2 in func: %f, %f", v2[0], v2[1]);
  	//Теперь приступим к вычитанию
  	new Float:v3[2]; 
  	v3[0] = v2[0] - v1[0]; 
  	v3[1] = v2[1] - v1[1]; 
  	printf("v3 in func: %f, %f", v3[0], v3[1]); 
} 

main() 
{ 
	new me[2] = {1.0, 1.1}; 
  	new target[2] = {2.0, 6.0}; 
  	v_sub(me, target); 
}

Результат из консоли:

v1 in func: 1.000000, 1.100000

v2 in func: 2.000000, 6.000000

v3 in func: 8388608.000000, 20132660.000000

 

Что я делаю не так?

Edited by Dworkin

Share this post


Link to post
Share on other sites

Выше я разобрался, надо в параметры добавить тип. Вот так

stock v_sub(Float: v1[2],Float: v2[2])

Но теперь учитывая эту ошибку у меня все равно получается нереальное число
 

#include <a_samp>
  
stock v_sub(Float:v1[2], Float:v2[2]) //Вычитание векторов 
{ 
	new Float:res[2]; 
  	res[0] = v2[0] - v1[0];
  	res[1] = v2[1] - v1[1];
  	printf("v_sub. v1: %f, %f", v1[0], v1[1]);
  	printf("v_sub. v2: %f, %f", v2[0], v2[1]);
  	printf("v_sub. res: %f, %f", res[0], res[1]);
  	return res; 
} 

stock v_magnitude(Float:v[2]) //Модуль вектора 
{ 
	new Float:res = floatsqroot(v[0] * v[0] + v[1] * v[1]);
  	printf("v_magnitude. v: %f, %f", v[0], v[1]);
  	printf("v_magnitude. res: %f", res);
  	return res; 
} 

stock v_normalize(Float:v[2]) //Нормализация вектора 
{ 
	new Float:magnitude = v_magnitude(v); 
  	printf("v_normalize. magnitude: %f", magnitude);
} 

main() 
{ 
	new Float:me[2] = {2.00, 2.1}; 
  	new Float:target[2] = {2.10, 5.2}; 
    	new Float:v_sub_res[2]; 
  	v_sub_res = v_sub(me, target); 
  	v_normalize(v_sub_res); 
}

Результат из консоли:
v_sub. v1: 2.000000, 2.099999

v_sub. v2: 2.099999, 5.199999

v_sub. res: 0.099999, 3.099999

v_magnitude. v: 0.099999, 3.099999

v_magnitude. res: 3.101612

v_normalize. magnitude: 1078362368.000000
 

То есть в функции v_magnitude у переменной res в результате операций получается нормальное число, но когда я возвращаю это число в функции v_normalize в переменую magnitude, оно почему, то превращается в нереально большое.

 

Что я делаю не так в этот раз?
 

Edited by Dworkin

Share this post


Link to post
Share on other sites

Если возвращаете Float, то и сток тоже нужно маркировать этим тегом, то есть

stock v_magnitude(Float:v[2])

заменить на 

 

stock Float:v_magnitude(Float:v[2])

Share this post


Link to post
Share on other sites

Точно, Спасибо!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Dworkin
      By Dworkin
      Привет. Мне тяжело дается понимание строк в pawn из за не динамических массивов.
      #include enum pInfo { pRangName[25] } new players[MAX_PLAYERS][pInfo]; new string[20]; main() { format(string, sizeof(string), "Салага"); printf(string); players[0][pRangName] = string; } выдает ошибку "error 047: array sizes do not match, or destination array is too small" на строку "players[0][pRangName] = string;"
      Я понимаю что в ошибке говорится что размер не совпадает, но не могу понять как это сделать в павне