Как бороться с чрезвычайно большими числами в Swift (или на любом другом языке)? [Дубликат]

В PHP оба 'my name' и "my name" являются строками. Вы можете узнать больше об этом в руководстве по PHP .

Вещь, которую вы должны знать, это

$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'

. В PHP люди используют одиночную кавычку для определения константа, например 'a', 'my name', 'abc xyz', используя двойную кавычку для определения строки, содержащей идентификатор, такой как "a $b $c $d".

И еще:

echo 'my name';

быстрее, чем

echo "my name";

, но

echo 'my ' . $a;

медленнее, чем

echo "my $a";

Это верно для других, используемых в строке.

0
задан jonrsharpe 24 August 2014 в 14:02
поделиться

2 ответа

Если вы знаете (или хотите учиться), как реализовать bignumber, определите свой собственный тип в swift (предположительно как struct), затем реализуйте перегрузки арифметических операторов +, - и т. д. и все, что вам нужно работа с этими большими номерами.

Здесь есть реализация в C ++ здесь , но если вы немного поделитесь Google, вы можете найти другие алгоритмы, которые вы можете перевести в быстрый код или примеры в другие языки (если вы не знакомы с C ++)

Swift уже определяет 2 "расширенных" типа с плавающей запятой с именами Float80 и Float96:

Float80 80 bit MacOS float: 1 sign bit, 15 exponent bits, 1 integer bit, 63 fraction bits
Float96 96 bit 68881 float: 1 sign bit, 15 exponent bits, 16 pad bits, 1 integer bit, 63 fraction bits

, но, по-видимому, перегрузка оператора не определена - это просто «изолированные» структуры.

0
ответ дан Antonio 1 September 2018 в 03:57
поделиться

Я работаю над библиотекой BigNumber, с помощью которой вы можете сделать некоторые огромные вычисления. Фактически библиотека основана на библиотеке GNU Multiple Precision (GMP), и я написал обертку Objective-C / Swift. В настоящее время возможна большая целая математика, в том числе большая перегрузка оператора. Пример кода выглядит следующим образом:

var err : NSError?
var bi1 = BigInt(nr: 12468642135797531)
var bi2 = BigInt(nr: "12345678901011121314151617181920", error: &err)
var res = bi1 * bi2
println("Multiply 2 BigInts: bi1 * bi2 = \(res.toString())")

, который приводит к:

Multiply 2 BigInts: bi1 * bi2 = 153933852140173822960829726365674325601913839520

Надеюсь, что библиотека (см. https://github.com/githotto/ osxgmp ) может быть вам полезен.

7
ответ дан iOS-Coder 1 September 2018 в 03:57
поделиться
Другие вопросы по тегам:

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