Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.

See all packages published by dankogai.

dankogai/swift-bignum 5.2.4

Arbitrary-precision arithmetic for Swift, in Swift

⭐️ 14

🕓 2 weeks ago

.package(url: "https://github.com/dankogai/swift-bignum.git", from: "5.2.4")

Arbitrary-precision arithmetic for Swift, in Swift

```
import BigNum
BigRat.sqrt(2, precision:128) // 240615969168004511545033772477625056927/170141183460469231731687303715884105728
BigFloat.exp(1, precision:128) // 2.718281828459045235360287471352662497759
```

This module offers two flavors of Arbitrary-precision types that conforms to FloatingPoint.

`BigRat`

- Arbitrary-precision rational number.`BigFloat`

- Arbitrary-precision floating point.

In addition to all arithmetic operations that FloatingPoint supports. Most of the functions in `<math.h>`

are offered as static functions. As you see in the synopsis above, all arithmetic functions and operators that are lossy can take `precision:Int`

as an optional argument. When omitted the value of `BigRat.precision`

or `BigFloat.precision`

is used (default:64)

`BigInt`

, an arbitrary-precision interger type is internally used and re-exported so you don't have to `import BigInt`

just for that. `BigInt`

is also extended with `.over()`

method so instead of constructing `BigRat`

directly, you can:

```
BigInt(3260954456333195553).over(BigInt(2305843009213693952)) // == BigRat.sqrt(2)
```

```
$ git clone https://github.com/dankogai/swift-bignum.git
$ cd swift-bignum # the following assumes your $PWD is here
$ swift build
```

Simply

```
$ scripts/run-repl.sh
```

or

```
$ swift run --repl
```

and in your repl,

```
Welcome to Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1). Type :help for assistance.
1> import BigNum
2> BigRat.sqrt(2, precision:128)
$R0: BigNum.BigRat = {
num = {
magnitude = {
kind = array
storage = 2 values {
[0] = 6448461645324402335
[1] = 13043817825332782212
}
}
sign = plus
}
den = {
magnitude = {
kind = array
storage = 2 values {
[0] = 0
[1] = 9223372036854775808
}
}
sign = plus
}
}
```

Simply add the package from **Package Dependencies** tab of the Project.
Enter `https://github.com/dankogai/swift-bignum`

in the search field and click `[Add Package]`

Now you are able to `import BigNum`

.

Now all you have to do is build and enjoy!

If you enconter errors like `Missing required module '_NumericShims'`

, try cleaning up your `~/Library/Developer/Xcode/DerivedData`

.

Add the following to the `dependencies`

section:

```
.package(
url: "https://github.com/dankogai/swift-bignum.git", .branch("main")
)
```

and the following to the `.target`

argument:

```
.target(
name: "YourSwiftyPackage",
dependencies: ["BigNum"])
```

Now all you have to do is:

```
import BigNum
```

in your code. Enjoy!

Swift 5 or better, OS X or Linux to build.

Depends on attaswift/BigInt for internal representation of `BigFloat`

and `BigRat`

.

Depends on apple/swift-numerics since version 5.1 for the `ElementaryFunctions`

protocol. Prior versions depended on dankogai/swift-floatingpoint for the `FloatingPointMath`

protocols but it is replaced by the `ElementaryFunctions`

.

link |

Stars: 14 |

Last commit: 2 weeks ago |

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics