Size: a a a

iOS Developers — русскоговорящее сообщество

2021 February 27

NK

Nameless King in iOS Developers — русскоговорящее сообщество
источник

EK

Evgeniy Kostin in iOS Developers — русскоговорящее сообщество
Свят, спасибо. Этот вариант я смотрел. Сложноватый пока для понимания.

Мне нужно из этого:

let numberOne = 10
let numberTwo = 8

let result: Double = Double(numberOne) / Double(numberTwo)

Найти это:

let resultInFractional = ...


И вывести через print ("Десятичная дробь \(result) имеет вид \(resultInFractional)")
источник

S

Sergey in iOS Developers — русскоговорящее сообщество
Математика она сложная для понимания )
источник

AM

Alexey Mishchenko in iOS Developers — русскоговорящее сообщество
ищи НОД и дели на него
источник

AM

Alexey Mishchenko in iOS Developers — русскоговорящее сообщество
делов-то))
источник

v

voodoo in iOS Developers — русскоговорящее сообщество
Evgeniy Kostin
Свят, спасибо. Этот вариант я смотрел. Сложноватый пока для понимания.

Мне нужно из этого:

let numberOne = 10
let numberTwo = 8

let result: Double = Double(numberOne) / Double(numberTwo)

Найти это:

let resultInFractional = ...


И вывести через print ("Десятичная дробь \(result) имеет вид \(resultInFractional)")
тебе нужен truncatingRemainder (либо modf) и алгоритм Эвклида
источник

AM

Alexey Mishchenko in iOS Developers — русскоговорящее сообщество
Evgeniy Kostin
Свят, спасибо. Этот вариант я смотрел. Сложноватый пока для понимания.

Мне нужно из этого:

let numberOne = 10
let numberTwo = 8

let result: Double = Double(numberOne) / Double(numberTwo)

Найти это:

let resultInFractional = ...


И вывести через print ("Десятичная дробь \(result) имеет вид \(resultInFractional)")
гугли алгоритм Евклида
источник

S

Sergey in iOS Developers — русскоговорящее сообщество
Там если загуглить есть 2 гиста с готовым кодом
источник

NK

Nameless King in iOS Developers — русскоговорящее сообщество
да там было решение, в целом несложное, в одну функцию, я скидывал выше
может есть более оптимизированные аналоги, хз
источник

v

voodoo in iOS Developers — русскоговорящее сообщество
проще всего через quotientAndRemainder, но сокращать дробь всё равно нужно
источник

S

Sergey in iOS Developers — русскоговорящее сообщество
Nameless King
да там было решение, в целом несложное, в одну функцию, я скидывал выше
может есть более оптимизированные аналоги, хз
Гисты с полной математикой, а не только переводом
источник

NK

Nameless King in iOS Developers — русскоговорящее сообщество
Sergey
Гисты с полной математикой, а не только переводом
да наверняка можно и модуль целый найти, но нахуя? если даже такое решение работает
весь вопрос для чего
если важна скорость, значит надо разобраться в вопросе досконально
если надо преподу лабу сдать, ну мб можно взять вот короткий простой кусок кода с перебором делителей
источник

NK

Nameless King in iOS Developers — русскоговорящее сообщество
typealias Rational = (num : Int, den : Int)

func rationalApproximation(of x0 : Double, withPrecision eps : Double = 1.0E-6) -> Rational {
   var x = x0
   var a = x.rounded(.down)
   var (h1, k1, h, k) = (1, 0, Int(a), 1)

   while x - a > eps * Double(k) * Double(k) {
       x = 1.0/(x - a)
       a = x.rounded(.down)
       (h1, k1, h, k) = (h, k, h1 + Int(a) * h, k1 + Int(a) * k)
   }
   return (h, k)
}
источник

NK

Nameless King in iOS Developers — русскоговорящее сообщество
тем более там всего 14 строчек, всё решение
главное с заданной точностью не обосраться
источник

v

voodoo in iOS Developers — русскоговорящее сообщество
на самом деле на точность пофигу и да, решение несколько строк. зачем прям модули хз
источник

NK

Nameless King in iOS Developers — русскоговорящее сообщество
да не, тип дробь может быть 0.33, а может быть 0.333333
и задав например точность 1e-7, можно получить не 1/3 а 103993/33102, поскольку за последней тройкой может быть все что угодно
источник

NK

Nameless King in iOS Developers — русскоговорящее сообщество
с этим аккуратнее, а в остальном решение рабочее
источник

v

voodoo in iOS Developers — русскоговорящее сообщество
Nameless King
да не, тип дробь может быть 0.33, а может быть 0.333333
и задав например точность 1e-7, можно получить не 1/3 а 103993/33102, поскольку за последней тройкой может быть все что угодно
неважно. ладно. ща покажу
источник

v

voodoo in iOS Developers — русскоговорящее сообщество
Nameless King
да не, тип дробь может быть 0.33, а может быть 0.333333
и задав например точность 1e-7, можно получить не 1/3 а 103993/33102, поскольку за последней тройкой может быть все что угодно
func findGcf(_ a: Int, _ b: Int) -> Int {
   var _a = a
   var _b = b
   while _b != 0 {
       let tmp = _a % _b;
       _a  = _b;
       _b = tmp;
   }
   return _a;
}

let x = 10
let y = 8
let (q, r) = x.quotientAndRemainder(dividingBy: y)

let gcf = findGcf(r,y)
let num = r/gcf
let denom = y/gcf

print("\(q) \(num)/\(denom)")
источник

v

voodoo in iOS Developers — русскоговорящее сообщество
ну и естественно дробь нужно считать только когда r > 0
источник