SWIFT / IOS Внедрение некоторой арифметики с ценами на акции, вычитание для получения ежедневного показателя прибыли / убытков
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Это не бухгалтерские расчеты, они все об измерении эффективности инвестиций, поэтому абсолютная точностьне требуется, вместо этого приоритет - выполнение триллионов вычислений за максимально короткое время (менее секунды) - следовательно, используется арифметика с плавающей запятой.Проблема, которую я описал ниже, становится важной, потому что очень маленькая ошибка умножения может стать значительной в масштабе, в котором я выполняю вычисления.
При использовании типа Float по умолчанию я получаю неточные результаты (см. Код игровой площадки) ниже.
import UIKit
var str = "Hello, playground"
let y: Float = 129.08
let t: Float = 130.29
let subtracted = t - y // results in 1.209991 !!!!!! not accurate, should be something like 1.209998
let returnVal = subtracted / y // Results in 0.009373966 also inaccurate
Если я применяю ту же арифметику в электронной таблице, я получаю ожидаемые результаты (или почти как черт): 130.29 - 129.08 = 1.20999999999998.
Я делаю фундаментальную ошибку?И у кого есть опыт этого?Как я могу получить те же результаты, что и электронная таблица (по которой я проверяю свои расчеты).
ОК, поэтому я обновился и включил преобразования из числа с плавающей запятой в двойные, как это предлагается в ответах, и посмотрите на результат!Двойное преобразование (float_value), кажется, добавляет мусор в младшие значащие цифры результата.
import UIKit
var str = "Hello, playground"
let y_float: Float = 129.08
let t_float : Float = 130.29
let y: Double = Double(y_float) // results in 129.0800018310547 !!!
let t: Double = Double(t_float) // results in 130.2899932861328
let subtracted : Double = t - y
let returnVal = subtracted / y
Так что теперь вопрос, есть ли способ сделать чистое преобразование из Float в Double?