Тип математики с плавающей запятой, которая может быть реализована на цифровом компьютере, обязательно использует приближение действительных чисел и операций над ними. (Стандартная версия стандартная работает до более чем пятидесяти страниц документации и имеет комитет для рассмотрения ее ошибок и дальнейшего уточнения.)
Это приближение представляет собой смесь приближений разного типа, каждый из которых можно либо игнорировать, либо тщательно учитывать из-за его конкретного способа отклонения от точности. Это также включает в себя ряд явных исключительных случаев как на уровне аппаратного обеспечения, так и на уровне программного обеспечения, которое большинство людей прогуливает прямо мимо, делая вид, что не замечает.
Если вам нужна бесконечная точность (например, вместо числа π одного из его более коротких резервных копий), вы должны написать или использовать символическую математическую программу.
Но если вы в порядке с идеей о том, что иногда математика с плавающей запятой нечеткая по значению и логике и ошибки могут быстро накапливаться, и вы можете написать свои требования и тесты для этого, тогда ваш код может часто проходить с помощью того, что находится в вашем FPU.
Ваш код выполняет целочисленное деление, беря целочисленный результат и преобразовывая его в double. Вместо этого вы хотите преобразовать эти отдельные целые числа в двойные, а затем выполнить деление. Например.
let result = Double(myInt!) / Double(lutning) * pi
Или определите
let lutning = 360.0
, а затем
let result = Double(myInt!) / lutning * pi
И, BTW, я бы предложил использовать M_PI
, а не определять ваши собственный pi
.
let result = Double(myInt!) / lutning * M_PI
В строке let result = (Double(myInt! / lutning) * Double(pi))
вы добавили свой тип к double
после , разделив два целых числа, чтобы ваш результат всегда был равен нулю. Вы должны сделать их удвоенными до деления.
let result = (Double(myInt!) / Double(lutning)) * Double(pi))
Вы делите Int на Int.
Целые деления округляются до ближайшего целого числа к нулю. Поэтому, например, 359/360 не является числом, близким к 1, оно равно 0. 360/360 до 719/360 равно 1. 720/360 до 1079/360 равно 2 и так далее.
Но ваше использование опций является жестоким. Я бы написал
let myInt = Int(graderna.text!)
let myInt2 = Int(radien.text!)
if let realInt = myInt, realInt2 = myInt2 {
let pi = 3.1415926
let lutning = 360.0
let result = Double (realInt) * (pi / lutning)
svar2.text = "\(result)"
}