Как я могу отключить экспоненциальное представление при работе с очень большими количествами в Perl?

Только для выделения этого существуют также ReadWriteLocks, доступные в Java, найденном как java.util.concurrent.locks. ReadWriteLock.

В большей части моего использования, я разделяю свою блокировку как 'для чтения' и 'для обновлений'. При простом использовании синхронизируемого ключевого слова все чтения к тому же блоку метода/кода будут 'поставлены в очередь'. Только один поток может получить доступ к блоку когда-то.

В большинстве случаев, Вы никогда не должны волноваться о проблемах параллелизма при простом выполнении чтения. Именно, когда Вы делаете записи, Вы волнуетесь о параллельных обновлениях (приводящий к потерянным из данных) или читающий во время записи (частичные обновления), о котором необходимо волноваться.

Поэтому блокировка чтения-записи имеет больше смысла мне во время многопоточного программирования.

11
задан brian d foy 15 September 2009 в 15:55
поделиться

4 ответа

See Math::BigInt

use Math::BigInt;
$x = Math::BigInt->new("3");
print $x ** 333;

Output:

760988023132059809720425867265032780727896356372077865117010037035791631439306199613044145649378522557935351570949952010001833769302566531786879537190794573523
15
ответ дан 3 December 2019 в 03:53
поделиться

Если вы хотите сделать это для всех целых чисел в вашей программе, вы можете просто добавить:

use bigint;

Если вы хотите сделать это только для некоторых целых чисел, вы может создавать объекты Math :: BigInt .

Также есть bignum и Math :: BigNum , если вы работаете с числами с плавающей запятой.

6
ответ дан 3 December 2019 в 03:53
поделиться

С такими большими числами у вас может быть больше цифр, чем точность, используемая для хранения чисел. (Увидев простой исполняемый пример, можно было бы решить этот вопрос.)

Если вам действительно нужно увидеть все 150+ цифр, вы должны использовать bigint (для целых чисел), bigrat (для рациональных чисел) и bignum (для чисел с плавающей запятой). числа) модулей.

2
ответ дан 3 December 2019 в 03:53
поделиться

Для очень маленьких значений см. Следующий код:

my $value = 1e-07;                 # = 0.0000001

# NOPE

print $value;                      # prints 1e-07, $value is a number
print sprintf("%f", $value);       # prints 0, $value is a number
print sprintf("%.10f", $value);    # prints 0.0000001000, $value is a number
$value = sprintf("%.10f", $value);
print $value                       # prints 1e-07, $value is a number

# /NOPE

use bignum;
$value = ($value+0)->bstr();
print $value;                      # prints 0.0000001, $value is a string
no bignum;
print $value;                      # prints 0.0000001, $value is a string

# HOORAY
3
ответ дан 3 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: