Код: Выделить всё
$ expr 662861 \* 4096
$ -1579888640 # в реале должно быть 2715078656
$ expr 56130355 \* 2048
$ -1009149952 # в реале должно быть 114954967040
Код: Выделить всё
$ expr 662861 \* 4096
$ -1579888640 # в реале должно быть 2715078656
$ expr 56130355 \* 2048
$ -1009149952 # в реале должно быть 114954967040
Код: Выделить всё
zg# awk 'BEGIN{print 662861 * 4096}'
2715078656
zg# awk 'BEGIN{print 56130355 * 2048}'
114954967040
zg#
Код: Выделить всё
echo "56130355*2048" | bc
114954967040
Код: Выделить всё
echo $((56130355*2048))
114954967040
тот который не вызывает внешних программplazmagod писал(а):А какой способ менее требовательный к ресурсам?
никакую, это вычисляет сам шеллplazmagod писал(а):И какую команду на исполнение вызывает запись вида $((expr1*expr2)) ?
Код: Выделить всё
let 56130355 \* 2048
поясниГость писал(а):еще можно
Код: Выделить всё
zg# let 56130355 \* 2048
let: Команда не найдена.
zg# man let
No manual entry for let
zg#
запускаешь в sh(1)?zg писал(а):поясниГость писал(а):еще можноКод: Выделить всё
zg# let 56130355 \* 2048 let: Команда не найдена.
Код: Выделить всё
(~). sh
$ let 56130355 \* 2048
114954967040
$ ^D
у bulitins'ов нет отдельных man'ов. Правда в случае let команда даже не упоминается в sh(1) ;\zg писал(а):Код: Выделить всё
zg# man let No manual entry for let zg#
Код: Выделить всё
zg# sh -c 'let 56130355 \* 2048'
-1009149952
zg#
хм, у мя 8-CURRENT. На amd64 и i386 результат один и тот же — 114954967040.zg писал(а):Код: Выделить всё
zg# sh -c 'let 56130355 \* 2048' -1009149952 zg#
Код: Выделить всё
(~). getconf LONG_MAX
9223372036854775807
(~). sh -c 'let 9223372036854775807 + 1'
-9223372036854775808
(~). sh -c 'let 9223372036854775806 + 1'
9223372036854775807
Код: Выделить всё
zg# getconf LONG_MAX
2147483647
zg#
Гость писал(а):Код: Выделить всё
(~). getconf LONG_MAX 9223372036854775807[/quote]сверился с i386. Все-таки это скорее LLONG_MAX, а не LONG_MAX.[quote="zg"]гм.. тогда лучше на авк делать, потому как не зависит от LONG_MAX[/quote]ну можно попробовать еще разбить число на несколько частей...
Код: Выделить всё
zg# getconf LLONG_MAX
9223372036854775807
zg# awk 'BEGIN{print 9223372036854775807 + 1}'
9223372036854775808
zg#
zg писал(а):Код: Выделить всё
zg# awk 'BEGIN{print 9223372036854775807 + 1}' 9223372036854775808 zg#
Код: Выделить всё
(~). awk 'BEGIN{print 9999999999999999 * 2}'
20000000000000000
(~). echo 9999999999999999 \* 2 | bc
19999999999999998