Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 27.11.2009, 11:35   #1
shpak
Нуждающийся
 
Аватар для shpak
 
Регистрация: 24.11.2009
Сообщений: 68
Написано 16 полезных сообщений
(для 40 пользователей)
Проблема в освении))

Допустим мне надо высчитать приращение х и у для расчета следующей точки в окружности, т.е. я пишу конструкцию типа
X = Math.Round(x0 + R * Math.Asin(a));
Y = Math.Round(y0 + R * Math.Acos(a));
Вылетает эррор:
Error 1 Cannot implicitly convert type 'double' to 'float'. An explicit conversion exists (are you missing a cast?)
Кто подскажет?
(Offline)
 
Ответить с цитированием
Старый 27.11.2009, 11:47   #2
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Проблема в освении))

X = (float)Math.Round(x0 + R * Math.Asin(a));
Y =(float) Math.Round(y0 + R * Math.Acos(a));
скорее всего так. попытайся приводить нужные числа к нужным типам. подскащки какие имеена числа не совпадают по типам студия обычно даёт
X = Math.Round(x0 + R * (float)Math.Asin(a));
Y = Math.Round(y0 + R * (float)Math.Acos(a));
или так) нужно смотреть конкретно
xD
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
shpak (27.11.2009)
Старый 27.11.2009, 11:50   #3
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблема в освении))

видимо X и Y типа float у тебя.
C# считает ошибкой даунгрейд типов, т.е. когда double (8байт) присваивается к переменной типа float(4байт), то точность данных падает. Есть два пути:
* сделать все участвующие переменные типа double
* сделать каст (насильное привидение типов)

X = (float)Math.Round(x0 + R * Math.Asin(a)); // при условии что x0, y0 и R типа double
Y = (float)Math.Round(y0 + R * Math.Acos(a));

А ещё можно даунгрейднуть значения косинуса:
X = Math.Round(x0 + R * (float)Math.Asin(a));
Y = Math.Round(y0 + R * (float)Math.Acos(a));
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
shpak (27.11.2009)
Старый 27.11.2009, 11:57   #4
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Проблема в освении))

честно, есдинственое чем мне не нравятся языки типа С++ и шарп так это ихняя маниакальная любовь к чёткому определения где какие типы, и чтобы все приведения типов были явно указаны юзером.
(Offline)
 
Ответить с цитированием
Старый 27.11.2009, 12:13   #5
jimon
 
Сообщений: n/a
Ответ: Проблема в освении))

DimasSup

вообще это разумно для языков которые позволяют юзеру делать свои типы, double это 8 байт, float это 4 байта, и double в float превращается никак не копированием 4 байт
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SBJoker (27.11.2009)
Старый 27.11.2009, 13:03   #6
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Проблема в освении))

я то понимаю, просто меня раздражает когда прозевал гдето разнность типов, и начинается пляска вокруг одной строки
(Offline)
 
Ответить с цитированием
Старый 27.11.2009, 13:05   #7
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблема в освении))

Всё это оффтоп, C# четко типизированный язык, однако никто немешает определить автоматические методы конвертации, например как определён почти для всех типов данных метод ToString() который автоматически вызывается при попытках работы с данными как со строкой.

Иными словами как и С++, язык позволяет подстраивать его под себя.
Учитывая что C# задумывался как язык написания приложений с высокой отказоустойчивостью, то такие требования к коду вполне нормальны, так же существует мнение что правильно спроектированное приложение содержит минимум мест в коде требующих приведения типов в сторону даунгрейда.

Так же всвязи с поддержкой многопоточности по-умолчанию, в языке под запретов обыкновенные указатели, однако им на замену пришли умные указатели, ссылки и прочие защищенные сущности. Однако в секции unsafe{ } возможно использование любых небезопасных конструкций.
__________________
(Offline)
 
Ответить с цитированием
Старый 27.11.2009, 14:20   #8
shpak
Нуждающийся
 
Аватар для shpak
 
Регистрация: 24.11.2009
Сообщений: 68
Написано 16 полезных сообщений
(для 40 пользователей)
Стрелка Ответ: Проблема в освении))

Сообщение от DimasSup Посмотреть сообщение
X = (float)Math.Round(x0 + R * Math.Asin(a));
Y =(float) Math.Round(y0 + R * Math.Acos(a));
И ведь работает)) Мужики вы боги)) я тут с бубном два часа над строчкой просидел)))) Уж думал дело без водки не обойдётся
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо shpak за это полезное сообщение:
johnk (27.11.2009), pax (27.11.2009)
Старый 27.11.2009, 14:25   #9
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Проблема в освении))

всегда рады помочь
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с С++ HAMANN C++ 10 24.12.2009 09:31
Проблема Mark Castle Основной форум 2 12.11.2009 18:19
Проблема rr333 3D Моделирование 10 07.06.2009 17:08
Проблема с MP3 и EAX Maxim1441 2D-программирование 3 29.07.2008 18:29
проблема с ode jimon 3D-программирование 0 24.09.2005 17:20


Часовой пояс GMT +4, время: 00:51.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com