В masm32lib имеется процедурка, возводящая 10 в степень Х табличным методом. я так понял это для скорости, так как иначе придется нудно калькулировать через логарифмы и степени двойки. вопрос: третьего не дано? (умножать/делить на 10 4096 раз не считается)
спасибо! это мне напомнило историю как нам задали синусоиду нарисовать, а я не знал, как в паскале вещественное в целое преобразовать. _1147243534__SINUS.PAS
вопрос: третьего не дано? Есть более быстрые общие методы возведения в степень. Кнут рулит - метод цепочек.
Чего там у Кнута, к сожалению и стыду своему, не знаю. А вот в дельфях используется такой способ возведения base в целую степень exponent (наверное из того же Кнута): Код (Text): mov eax,[exponent] fld1 fld [base] jmp @@2 @@1: fmul st,st @@2: shr eax,1 jnc @@1 fmul st1,st jnz @@1 fstp ;в st - результат Это для положительной степени. Для отрицательной берется ABS(exponent), а в конце fld1 и fdivrp. Здесь число умножений = log2(exponent).
честно говоря, я и сам сторонник табличных методов, просто мне тамошняя таблица по глазам ударила. я ее пока преобразовал к приятному (на мой взгляд) виду: Код (Text): ten_1 dt 1.0e0001,1.0e0002,1.0e0003,1.0e0004 dt 1.0e0005,1.0e0006,1.0e0007,1.0e0008 dt 1.0e0009,1.0e0010,1.0e0011,1.0e0012 dt 1.0e0013,1.0e0014,1.0e0015 ten_16 dt 1.0e0016,1.0e0032,1.0e0048,1.0e0064 dt 1.0e0080,1.0e0096,1.0e0112,1.0e0128 dt 1.0e0144,1.0e0160,1.0e0176,1.0e0192 dt 1.0e0208,1.0e0224,1.0e0240 ten_256 dt 1.0e0256,1.0e0512,1.0e0768,1.0e1024 dt 1.0e1280,1.0e1536,1.0e1792,1.0e2048 dt 1.0e2304,1.0e2560,1.0e2816,1.0e3072 dt 1.0e3328,1.0e3584,1.0e4096,1.0e4352 dt 1.0e4608,1.0e4864 (пришлось поправить из-за табов - прога должна быть)красивой