Это проблема большого числа или проблема формата TclTk? - PullRequest
0 голосов
/ 08 февраля 2019

Я использую ActiveTcl 8.6.8 в Windows 8.1.

Имеет ли TclTk большие "неограниченные" числа, такие как Python и Ruby?Если да, то что не так со вторым разделом кода ниже?

Следующий код не имеет проблем, и я его понимаю.

% set a 1234567890
1234567890
% puts $a
1234567890
% expr $a +10
1234567900
% format %d $a
1234567890
% format %5d $a
1234567890
% format %15d $a
     1234567890

Что не так со следующим кодом?

% set b 9876543210
9876543210
% puts $b
9876543210
% expr $b + 10
9876543220
% format %d $b
1286608618
% format %5d $b
1286608618
% format %15d $b
     1286608618

Почему формат не дает правильного вывода?Что я делаю не так?

1 Ответ

0 голосов
/ 08 февраля 2019

Tcl имеет бигнумы.Сделано с 8.5.Он использует их где угодно в своем арифметическом коде;Вы должны притвориться, что все целые числа являются бигнумами (и позволить Tcl выбрать любой формат хранения для внутреннего использования).

Команды format и scan требуют немного дополнительной работы, потому что поддерживают их, потому что онидолжны также поддерживать старый код, который зависел от поведения ограничения диапазона, которое было ранее распространенным.Это означает использование ll в качестве модификатора с кодами формата;например, с %d:

% format %d 123123123123123123123123
-8893568888133913677
% format %lld 123123123123123123123123
123123123123123123123123

% scan 123123123123123123123123 %d
9223372036854775807
% scan 123123123123123123123123 %lld
123123123123123123123123

Это не зависит от управления шириной поля.

% format %40d 123123123123123123123123
                    -8893568888133913677
% format %40lld 123123123123123123123123
                123123123123123123123123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...