числа? Через FPU с конца буфера? Без FPU - по быстрому никак не сделать деление 64 битного числа на 10?
ты определись, тебе быстро или комрактно? порой жти вещи не совместимы
Ну, можно сделать какое-то среднее решение. В целом, получается что без FPU - долго т.к. делить 64 битные числа это очень медленно. А с FPU - быстро. Но алгоритм основан на фиксированном делителе (10), число постоянно делится на 10 и печатается остаток, с конца буфера. Вот как бы ускорить это, длина ведь не известна, значит приходится делать промежуточный буфер и потом перекидывать. Думал посчитать длину числа и установить нужный конец буфера, чтобы сразу выводить в финальный буфер - но считать длину тоже не быстро (по формуле с логарифмом, это 8 команд FPU на все подсчёты).
я уже объяснял, у тебя константный делитель, для этого случая есть оптимизация, заменяющая деление умножением
Она в итоге быстрее чем FPU?
наверняка быстрее, чем деление на нём
раз в 10 по времени быстрее
Нашёл какие-то громоздкие конструкции. Можно пример как поделить 64-битное число на 10 без FPU?
умножить на 0x1999_9999_9999_9999 взять старшую часть 128битного результата
А как в этом случае найти остаток от деления на 10?
по определению остатка
Не сказал человеку про коррекцию ошибки
Ещё одним умножением, в случае fpu, ты остаток тоже сразу не получишь
ну, полезно будет самому разобраться :)
Обсуждают сегодня