Здравствуйте, rg45, Вы писали:
r> R>Да ты на ответы мне уже потратил времени больше, чем потратил бы на добавление поддержки знаков в парсинг
r> Так я и на ответы не планировал тратить столько времени. Шестой десяток живу, а не вестить на провокации так и не научился. Видимо, не судьба.
Провокацией был код на паскале, а кривой парсинг, это просто кривой парснг
Здравствуйте, rudzuk, Вы писали:
R>Провокацией был код на паскале, а кривой парсинг, это просто кривой парснг
Если ты так заинтересовался этим вопросом, отчего бы тебе не довести этот вопрос до совершенства? Потом поделишься результатами. Думаю, многим будет интересно. Мне так точно.
--
Re[34]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, rg45, Вы писали:
r> R>Провокацией был код на паскале, а кривой парсинг, это просто кривой парснг
r> Если ты так заинтересовался этим вопросом, отчего бы тебе не довести этот вопрос до совершенства? Потом поделишься результатами. Думаю, многим будет интересно. Мне так точно.
Я таки свою parseInt на паскале написал и 64-битная версия даже обогнала шарповую, т.ч. я уже
Здравствуйте, rudzuk, Вы писали:
R>Я таки свою parseInt на паскале написал и 64-битная версия даже обогнала шарповую, т.ч. я уже
Ну, хорошо, твердо не обещаю, но попробую найти время, чтоб довести функцию парсинга до какого-то завершенного состояния — с форматным контролем, поддержкой знаков и оптимизацией, которую я наметил. Только чуть попозже. Сейчас просто не раполагаю временем.
Здравствуйте, rudzuk, Вы писали: R>Я в этом даже не сомневаюсь. Интересно другое: а если и на шарпе использовать ParseInt?
Тогда C# снова обгоняет плюсы. Примерно 750 мс (C#) против 850 мс (C++). Процедуры ParseInt в плюсах и в шарпе идентичны с поправкой на синтаксис.
C# 750 ms
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace ParseIntCodealot
{
internal class Program
{
static void Main(string[] args)
{
var vals = new string[0x4000_000];
var watch = Stopwatch.StartNew();
var random = new Random(DateTime.Now.Second);
for (var i = 0; i < vals.Length; i++)
{
vals[i] = random.Next().ToString();
}
watch.Stop();
Console.WriteLine($"Init: {watch.Elapsed.TotalSeconds}");
TestPerformanceManaged(vals);
}
static void TestPerformanceManaged(string[] vals)
{
var watch = Stopwatch.StartNew();
var res = 0L;
foreach (var val in vals)
{
//var num = int.Parse(val);var num = ParseInt(val);
res ^= num.GetHashCode();
}
Console.WriteLine("Hash = {0:X}", res);
watch.Stop();
Console.WriteLine($"TestPerformanceManaged: {watch.Elapsed.TotalSeconds}");
}
static int ParseInt(string val)
{
int res = 0;
foreach (var d in val)
{
if ('0' <= d && d <= '9')
{
res = res * 10 + d - '0';
}
else
{
throw new ArgumentOutOfRangeException("'" + d + "': Symbol is out of the range");
}
}
return res;
}
}
}
Здравствуйте, rg45, Вы писали:
r> R>Я в этом даже не сомневаюсь. Интересно другое: а если и на шарпе использовать ParseInt?
r> Тогда C# снова обгоняет плюсы. Примерно 750 мс (C#) против 850 мс (C++).
Здравствуйте, rg45, Вы писали:
R>Тогда C# снова обгоняет плюсы. Примерно 750 мс (C#) против 850 мс (C++). Процедуры ParseInt в плюсах и в шарпе идентичны с поправкой на синтаксис.
А вот это уже совсем удивляет.
Ад пуст, все бесы здесь.
Re[43]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, Codealot, Вы писали:
C>Жжошь напалмом, аргументация на высшем уровне.
А кто тебе какую аргументацию обещал, чудик? Я тебе раз пять уже написал, что у меня не было намерений что-либо тебе доказывать, то есть, вообще. Ты попей для головы, что-нибудь, у тебя с кровообращением проблемы, походу.
Здравствуйте, rg45, Вы писали:
C>>Жжошь напалмом, аргументация на высшем уровне.
R>А кто тебе какую аргументацию обещал, чудик? Я тебе раз пять уже написал, что у меня не было намерений что-либо тебе доказывать, то есть, вообще. Ты попей для головы, что-нибудь, у тебя с кровообращением проблемы, походу.