![]() |
Расширение 32-битной арифметики
Казалось, что данный вопрос уже поднимался в ветке, но ничего не нашлось...
Предлагаю поделиться наработками по увеличению разрядности арифметики - 32 бита обычно хватает, но только до поры, пока не начинается работа с кучей файлов и их размеры не вылазят за 4ГБ... однажды я наскоро "заткнул" брешь введя отдельно накопитель в гигабайтах, но выглядело это неказисто и работало только в плане сравнения чисел, без вывода на экран... после этого делал пару "подходов" - хотелось "красиво" реализовать 4 базовые функции и функции по представлению данных (перевод в текст и обратно), но никчему так и не пришел. :sorry: |
Вложений: 1
Есть консольные калькуляторы
|
NiOl, имхо "универсальные" варианты противоречат духу скриптов... ;)
утилит много (тот же AWK), да и WSH всегда под рукой, можно даже совместить в одном файле на пробу, вариант суммы/разности для 16-разрядных чисел ~ 32 петабайта: Код:
@echo off - делим число на 2 части по восемь 10-тичных разрядов; - складываем отдельно младшую/старшую части; - обрабатываем перенос из младшей в старшую; - соединяем в одну строку. |
обобщение на случай чисел любой длины (до 1024 десятичных знаков):
Код:
:SUM %int% %int% [%VarSum%] |
amel27, примерно так и поступил, только в Вашем примере непонятен смысл "delims=0" (подозреваю, что обход ошибки автоматического преобразования из восьмеричной системы), ну да не столь важно, т.к. подумывал об использовании шестнадцатиричной системы для хранения и разбиения строки значения на части...
Цитата:
зы: впервые вопрос ограничения 32 бит возник в батнике, лепящем HTML-ки для выкладывания фоток и прочего (с уже готовыми превьюшками), там сделал процедурку для пересчета размера в "более наглядный" вид: |
Цитата:
Цитата:
|
Цитата:
парочка моментов на тему автопреобразования типа данных: 1: намучался, пока отлаживал скрипт "напоминалки" - взбрело же в голову сделать фичу - если число задержки начинается с нуля - то это секунды, а иначе - минуты (ну когда 2 минуты - мало, а 3 - много ;) ) если интересно вот он: 2: Обход преобразования из восмеричной системы я сделал так (я использовал по 9 цифр для сложения) поскольку из 10го разряда мне главное не вылезти за цифру 1 (остальные 9 разрядов могут содержать любые цифры) и использовал его как раз для "переноса", то младшая часть получалась просто: set /a Low=1%Src:~-9%-1000000000 - использовал так нелюбимое мной автопреобразование типа ;) А вот обработать лидирующий минус - не догадался, в результате было только сложение (ну оно мне и было нужно в конкретной задаче). |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Время: 21:59. |
Время: 21:59.
© OSzone.net 2001-