Задание 1 cs193p Winter 2015 Калькулятор

Содержание

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 1″На русском языке вы можете скачать здесь:

Задание 1 iOS 8.pdf

Решение Задания 1 для Swift 1.2 и Swift 2.0 находится в посте Задание  1 cs193p Winter 2015 Калькулятор для Swift 1.2 и Swift 2.0.

Задание 1 cs193p Winter 2015 Калькулятор: 4 комментария

  1. Вы просто великий человек!!!!!! Спасибо вам огромное за перевод!

  2. при вычитании 8.2 минус 8.5 результат получается -0.300000000001
    решить это получилось только заменив double на float. но почему возникал этот кейс? при этом 5.2-5.3 результат ровно -0.3. я не очень понимаю…

    • Действительно так, любопытно. Это связано с точностью бинарного представления числа с плавающей точкой. Если вы включите отладчик, то увидите, что число 8.2 представлено как 8.1999999999999993, а 8.5 как 8.5, так что разница будет -0.30000000000000071. Но в Double 15 десятичных значащих цифр, так что цифры 71 находятся за пределами точности числа Double, но именно они и дают нам в конце 1. Кстати, число 5.2 представляется как 5.2000000000000002, а а 5.5 как 5.5, так что разница будет -0.29999999999999982, но в этом случае округление выдаст правильный результат (нам просто повезло). Для преобразования числа (8.2 -8.5) в строку мы используем String interpolation «\(newValue)», которая пытается представить все 15 десятичных цифр после точки, что неверно, так как исходное число содержало только 15 верных значащих цифр 8.20000000000000. К сожалению, мы не можем управлять форматом вывода в String interpolation, но можем,например, использовать display.text = String(format: «%f», newValue!). Так что менять double на float не стоит. Более гибкий результат можно получить с помощью NSNumberFormatter как это сделано в посте «Задание 2. Решение — Возвращаем enum Result (дополнительные пункты 2, 3)»

Обсуждение закрыто.