• 0

Question

Dworkin
Новичок

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

#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

3 answers to this question

  • 0
Dworkin
Новичок

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

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
  • 0
DEST
Maintainer

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

stock v_magnitude(Float:v[2])

заменить на 

 

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

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Владислав Малиновский
      By Владислав Малиновский
      SWEEK RUSSIA — онлайн игра на телефон с открытым миром, в котором Вы можете создать персонажей вместе со своими друзьями и начать весело проводить время. Вы можете продвигаться по сюжету квестовых миссий или же начать игру с зарабатывания денег в транспортной компании. Создавать организации, подниматься по карьерной лестнице. Заполучив влияние над другими игроками - попробуй себя в роли Президента.
       
      Нам нужны ответственные люди на должность главного администратора. Если вы считаете себя адекватным и ответственным, отпишите в vk.com/devmaksim или t.me/raphmarci.
       
      Официальный сайт проекта - sweekrussia.ru
      Официальный форум проекта - forum.sweekrussia.ru
      Официальное сообщество VK - vk.com/sweekrussia.game
      Официальный TG канал - t.me/sweek_dev
    • bogdan295@gmai
      By bogdan295@gmai
      Здраствуйте, я создавал новую организации когда дело дашло до пикапов они не создаются 
      new lssd1; new lssd2;  else if(pickupid == lssd2)// Вход     {         SetPlayerInteriorEx(playerid,0);         SetPPos(playerid,1567.5510,-1657.9956,5.3859);         SetPlayerFacingAngle(playerid, 500);         return true;     } else if(pickupid == lssd1)// Вsход     {         SetPlayerInteriorEx(playerid,0);         SetPPos(playerid,630.0542,-572.0032,16.3359);         SetPlayerFacingAngle(playerid, 500);         return true;     }     lssd2 = CreatePickupAC(1318,1,626.9653,-571.8394,17.9207, 147); // вход лссд     lssd1 = CreatePickupAC(1318,1,1567.4720,-1660.6494,5.3859, 147); // выход лссд Что я сделал не так?