blob: 372398ca520dcf39e40064cead740b02b24d62d6 [file] [log] [blame]
#ifndef TH_GENERIC_FILE
#define TH_GENERIC_FILE "generic/THTensorRandom.c"
#else
TH_API void THTensor_(random)(THTensor *self)
{
#if defined(TH_REAL_IS_BYTE)
TH_TENSOR_APPLY(real, self, *self_data = (unsigned char)(THRandom_random() % (UCHAR_MAX+1)););
#elif defined(TH_REAL_IS_CHAR)
TH_TENSOR_APPLY(real, self, *self_data = (char)(THRandom_random() % (CHAR_MAX+1)););
#elif defined(TH_REAL_IS_SHORT)
TH_TENSOR_APPLY(real, self, *self_data = (short)(THRandom_random() % (SHRT_MAX+1)););
#elif defined(TH_REAL_IS_INT)
TH_TENSOR_APPLY(real, self, *self_data = (int)(THRandom_random() % (INT_MAX+1UL)););
#elif defined(TH_REAL_IS_LONG)
TH_TENSOR_APPLY(real, self, *self_data = (long)(THRandom_random() % (LONG_MAX+1UL)););
#elif defined(TH_REAL_IS_FLOAT)
TH_TENSOR_APPLY(real, self, *self_data = (float)(THRandom_random() % ((1UL << FLT_MANT_DIG)+1)););
#elif defined(TH_REAL_IS_DOUBLE)
TH_TENSOR_APPLY(real, self, *self_data = (float)(THRandom_random() % ((1UL << DBL_MANT_DIG)+1)););
#else
#error "Unknown type"
#endif
}
TH_API void THTensor_(geometric)(THTensor *self, double p)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_geometric(p););
}
TH_API void THTensor_(bernoulli)(THTensor *self, double p)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_bernoulli(p););
}
#if defined(TH_REAL_IS_FLOAT) || defined(TH_REAL_IS_DOUBLE)
TH_API void THTensor_(uniform)(THTensor *self, double a, double b)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_uniform(a, b););
}
TH_API void THTensor_(normal)(THTensor *self, double mean, double stdv)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_normal(mean, stdv););
}
TH_API void THTensor_(exponential)(THTensor *self, double lambda)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_exponential(lambda););
}
TH_API void THTensor_(cauchy)(THTensor *self, double median, double sigma)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_cauchy(median, sigma););
}
TH_API void THTensor_(logNormal)(THTensor *self, double mean, double stdv)
{
TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_logNormal(mean, stdv););
}
#endif
#endif