Я пытаюсь округлить следующую формулу, если я раскомментирую одну из строк кода, которая должна округлять мою binet
переменную, ошибки программы.
Возвращаемое значение будет приведено к int,это обрезает число с плавающей точкой, но в данном случае это не является предпочтительным.
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
func fibFormula(_ n: Int) -> Int {
var binet = pow((pow(5, 0.5) + 1) / 2, Float(n)) / pow(5, 0.5)
// binet = round(binet)
// binet.round();
return Int(binet)
}
print(fibFormula(5)) // Should output 5
Ошибка:
Stack dump:
0. Program arguments: /usr/bin/swift -frontend -interpret fib.swift -disable-objc-interop -color-diagnostics -module-name fib -- 5
/usr/bin/swift(+0x42e1b54)[0x55f476d0bb54]
/usr/bin/swift(+0x42df93e)[0x55f476d0993e]
/usr/bin/swift(+0x42e1d12)[0x55f476d0bd12]
/usr/lib/libpthread.so.0(+0x13d00)[0x7fdf098bfd00]
[0x7fdf099243fa]
[0x7fdf099241ea]
/usr/bin/swift(+0xd7f095)[0x55f4737a9095]
/usr/bin/swift(+0xd82fe0)[0x55f4737acfe0]
/usr/bin/swift(+0x607d13)[0x55f473031d13]
/usr/bin/swift(+0x5df088)[0x55f473009088]
/usr/bin/swift(+0x5da4c2)[0x55f4730044c2]
/usr/bin/swift(+0x58bea1)[0x55f472fb5ea1]
/usr/lib/libc.so.6(__libc_start_main+0xf3)[0x7fdf090f7ee3]
/usr/bin/swift(+0x58a2be)[0x55f472fb42be]
Segmentation fault (core dumped)
Кто-нибудь может мне помочь разрешить эту ошибку? Ядовольно быстро, и я использую Linux.
Редактировать: Когда я пробую свой код в песочнице , она работает с использованием функции round
.Может быть, это проблема Glibc
?
Более читаемая версия формулы (также другой метод, те же результаты):
import Glibc
func fibFormula2(_ n: Int) -> Int {
let sqrt5 = sqrt(5)
let phi = (sqrt5 + 1) / 2
let binet = pow(phi, Double(n)) / sqrt5
return Int(round(binet))
}
print(fibFormula2(5)) // Should output 5