1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
/*
* rtmath.epoc.cpp
*
* Copyright (c) 2000-2004 by Florian Fischer (florianfischer@gmx.de)
* and Martin Trautmann (martintrautmann@gmx.de)
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
*/
// rtmath.epoc.cpp: Random implementation using Epoc System Libraries
#ifndef __LRT_MATH_EPOC__
#define __LRT_MATH_EPOC__
#include "rtmath.h"
#include <e32std.h>
#include <e32math.h>
namespace lrt {
TInt64 MATHseed;
int Math::rand(int from, int to)
{
if(!randomInit) randomize();
return (int)((float)(to - from + 1) * ::Math::Rand(MATHseed) / (::KMaxTInt + 1.0f)) + from;
}
void Math::seed(unsigned long seed)
{
MATHseed = (TUint)seed;
randomInit = true;
}
void Math::randomize()
{
TTime t = TTime();
t.HomeTime();
MATHseed = t.Int64();
randomInit = true;
}
// FIXME: all those zero returns should be NaN but there seems to be no way to get it...
double Math::sqrt(double num)
{
double res;
if(::Math::Sqrt(res, num) < 0)
return 0;
else
return res;
}
double Math::log10(double num)
{
double res;
if(::Math::Log(res, num) < 0)
return 0;
else
return res;
}
double Math::ln(double num)
{
double res;
if(::Math::Ln(res, num) < 0)
return 0;
else
return res;
}
double Math::exp(double num)
{
::Math::Exp(num, num);
return num;
}
double Math::sin(double num)
{
::Math::Sin(num, num);
return num;
}
double Math::cos(double num)
{
::Math::Cos(num, num);
return num;
}
double Math::tan(double num)
{
if(::Math::Tan(num, num) < 0)
return 0;
return num;
}
} // namespace
#endif
|