Некоторое числовое безумие - PullRequest
0 голосов
/ 09 ноября 2019

Недавно я написал несколько вспомогательных функций для стандартных математических операций (+, -, *, /) для обработки статистики без запаздывания, поэтому явное приведение чисел не требуется

Double(8)/Double(3) // can be written as 8/3

Это работало без хлопот,пока я не укажу на какое-то ошибочное поведение оператора деления, то есть:

func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: F, rhs: I) -> F {
    return lhs / F(rhs)
}
func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: I, rhs: F) -> F {
    return rhs / F(lhs)
}

let a = 10.0
let b: UInt8 = 8

print(a/b) //outputs 1.25
print(b/a) //THIS is where weird stuff shows because it outputs 1.25 as well, but should 0.8!!

Что-то мне не хватает или это может быть ошибка?

1 Ответ

0 голосов
/ 09 ноября 2019

Это был маленький занос с положением операндов. Действительный код:

func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: F, rhs: I) -> F {
    return lhs / F(rhs)
}
func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: I, rhs: F) -> F {
    return F(lhs) / rhs
}
let a = 10.0
let b: UInt8 = 8

print(a/b) //1.25
print(b/a) //0.8
...