Я решил повысить их до целых.Я могу сделать это, потому что я знаю, сколько значащих цифр в числе.
int real = (int)(dbl * multiplier);
Я уверен, что десятичные дроби будут медленнее просто потому, что у меня нет процессора x128 и шины памяти.Использование Math - это вопрос, который никогда не задавался.
извините за размытие с приведением к плаванию ранее.
РЕДАКТИРОВАТЬ ОК.Так что я понял, что ТАК теперь больше не бесплатно.Каждый вопрос требует теперь внимания, которое требует больших затрат времени ... Вот код, который отвечает, почему я не буду использовать десятичные дроби и математику.
class Program
{
static void Main(string[] args)
{
Start();
Console.ReadLine();
}
static int TESTS = 10;
static int LOOPS = 50000;
static double d1 = 1.5530000000000002;
static double d2 = 1.5531;
static double dResult;
static int iResult;
static decimal cResult;
static void Start()
{
// actual test
for (int x = 0; x < TESTS; x++)
{
Stopwatch sw = new Stopwatch();
long tick1, tick2, tick3;
sw.Start();
for (int j = 0; j < LOOPS; j++)
{
dResult = Math.Round(d1 / 2.0, 4);
dResult = Math.Round(d2 / 2.0, 4);
}
sw.Stop();
tick1 = sw.ElapsedTicks;
sw.Restart();
for (int j = 0; j < LOOPS; j++)
{
iResult = (int)(d1 / 2.0 * 10000.0);
iResult = (int)(d2 / 2.0 * 10000.0);
}
sw.Stop();
tick2 = sw.ElapsedTicks;
sw.Restart();
for (int j = 0; j < LOOPS; j++)
{
cResult = decimal.Round((decimal)d1, 4);
cResult = decimal.Round((decimal)d2, 4);
}
sw.Stop();
tick3 = sw.ElapsedTicks;
Console.WriteLine("Math {0} Int {1} Decimal {2}", tick1, tick2, tick3);
}
}
}
первая часть - это математика, вторая - то, для чего я предназначениспользуйте (преобразование в int), а третий - в десятичные дроби.
Результаты на моем i7 выглядят следующим образом - 12K тиков, 700 тиков, 35K тиков соответственно.