Например, у меня есть три переменные: «x», «y» и «z». Все они находятся в определенном диапазоне {min, max}. Теперь я хочу вычислить новую переменную, скажем, p = x + F * (yz), где F - некоторая константа между 0 и 1. Эта новая вычисленная переменная «p» должна отображаться выше (min, max } ассортимент. Как мне это сделать?Значение отображения для определенного диапазона
РЕДАКТИРОВАТЬ 1
Генерирующие числа в массиве:
population[D*id]=0;
population[D*id+N]=0;
population[D*id +2*N]=0;
population[D*id+1]=rndFloat(globalState,threadIdx.x,4);
population[D*id+N+1]=0;
population[D*id +2*N+1]=0;
for(int i=2; i<N; i++){
float min= -4 - 1/4*abs((int)((i-4)/3));
float max= 4 + 1/4*abs((int)((i-4)/3));
if(i==2)
{
population[D*id+2]=rndFloat(globalState,threadIdx.x,3.14159265359);
population[D*id+N+2]=rndFloat(globalState,threadIdx.x,min,max);
population[D*id +2*N+2]=0;
}
else
{
population[D*id +i]=rndFloat(globalState,threadIdx.x,min,max);
population[D*id+N+i]=rndFloat(globalState,threadIdx.x,min,max);
population[D*id +2*N+i]=rndFloat(globalState,threadIdx.x,min,max);
}
}
вычисления новой переменной:
for(int i=0; i<D-1; i++)
{
pop[D*id+i]= population[D*a +i] + F*(population[D*b +i]-population[D*c +i]);
}
индексы а, б и в выбраны случайным образом. Важно заметить, это минимальная и максимальная дальность и его пристройка заданными показателями:
float min= -4 - 1/4*abs((int)((i-4)/3));
float max= 4 + 1/4*abs((int)((i-4)/3));
где я заменяется на а, Ь и с для каждого диапазона.
EDIT 2
упростить, давайте просто скажем, что есть 3 переменные х, у и г, которые находятся в определенном диапазоне. Каждая переменная имеет свой собственный диапазон. Я хочу вычислить новую переменную p = x + F * (y-z), и ее необходимо соответствующим образом отобразить в ее собственный диапазон. Как мне это сделать?
Можете ли вы быть более точным? Вы хотите добавить p к существующему диапазону/массиву? Какой у вас код? – RST
Вопрос в том, что вы спросили, на него нельзя ответить, потому что это очень неясно. Что вы имеете в виду, когда говорите: «p нужно отображать»? Какое отображение вы хотите? – interjay
Это называется [линейная интерполяция] (http://en.wikipedia.org/wiki/Linear_interpolation). Если вы не знаете математику (** Почему? ** Программистам нужна математика!), Попробуйте придумать решение с помощью ваших клеток мозга.Просто немного усилий, и вы быстро узнаете, что 'new_x = new_min + (old_x - old_min)/(old_max - old_min) * (new_max - new_min)'. –