Опрос

Что такое, по вашему мнению, «демократия»?













Автоматическое преобразование типов

15.01.2010 11:44 Администратор
Печать PDF
Рейтинг пользователей: / 0
ХудшийЛучший 
Индекс материала
Автоматическое преобразование типов
Страница 2

Другой, еще более таинственной причиной проблем в сценариях является автоматическое преобразование типов. Трудно их бывает отследить потому, что они требуют досконального понимания механизмов приведения типа данных одной переменной к типу данных другой переменной и обратно. Подобное понимание опирается на знание того, как каждый тип данных хранит соответствующую информацию. Возьмем, к примеру, следующие операторы: int $i = 7.534; print $i; // Результат: 7 Как упоминалось ранее, тип данных int может хранить только целочисленные значения. Если вы попытаетесь присвоить такой переменной значение 7.534, дробная часть будет попросту отброшена, а целая сохранится. В результате переменная получит значение 7. К сожалению, Maya не предупреждает о таких потенциально опасных преобразованиях.

Операторы, которые кажутся простыми, могут работать неправильно лишь из-за того, что различные типы данных функционируют по-разному, В результате выполнения этих операторов будет выведен 0. float $ 1 = 1 / 3 ; print $i; // Результат: О Разве значение не должно составлять 0.333...? Причина, по которой этот код оказался некорректным, состояла в том, что начальное вычисление проводилось по правилам арифметики целых чисел. Maya предположила, что 1 и 3 в первом операторе были целыми. Поэтому для вычисления частного применялась целочисленная арифметика: обычно 1/3 - это 0.333...

, но прл использовании целых чисел целая часть результата равна 0, и именно это значение сохраняется в памяти. Код работал бы правильно, если бы операторы были записаны так: float $1 = 1 / 3.0; print $i; // Результат: 0.33333 Почему же теперь вычисления приводят к нужному результату? Maya просматривает операнды деления следующим образом. Значение 1 интерпретируется как int. Значение 3.0 интерпретируется как float.

На уровне программной реализации Maya не выполняет операций над смешанными типами данных; вместо этого, она приводит все операнды к одному типу, а затем производит вычисления. Так как вещественный тип обладает большей точностью по сравнению с целочисленным, Maya преобразует целое число к вещественному, после чего выполняет операцию над значениями с плавающей запятой, поэтому результат оказывается более точным. Читателю, наверное, ясно, что проблема автоматического преобразования типов в целом весьма сложна и запутанна. Ради создания качественных программ не нужно овладевать всеми ее хитросплетениями.



Добавить комментарий


Защитный код
Обновить

Поиск

В закладку

 
 

Авторизация



Погода