![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 18.08.2011
Сообщений: 70
|
![]()
Здравствуйте! Подскажите пожалуйсто.
Когда например пишиш float car=10; int house=0; house=car; то компилятор выдает ошобку. при явном приведении типа таже ошибка интересно что из float в int не переводит, а наоборот все нормально Может нужно в настройках компилятора чтото поменять Последний раз редактировалось MaratZahidyl; 05.09.2011 в 16:49. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
И где же ошибка? Куда вы ее спрятали?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 18.08.2011
Сообщений: 70
|
![]()
сегодня текст ошибки не могу предоставить, единственное что помню это то что ошибка одна, и указывает на функцию в которой поисходит это приведение типов, при двойном щелчке на ошибке к месту самой ошибки не переходит.
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Есть такие понятия как явное и неявное преобразование типов. Обычно неявные преобразования работают только в случае отсутствия потери данных (при преобразовании из int во float никакая информация не теряется. Грубо говоря, было 10, а стало 10.0). В случае же с преобразованием из float в int, теряется дробная часть (было 15,32, а стало 15) и поэтому данное преобразование выполняется только явно: house = (int) car;
Так же делайте и при разработке своих классов в будущем, т.к. в С++ неявные преобразования любят выполняться в самых неожиданных местах и, в случае потери данных при таких преобразованиях, будете долго искать ошибки. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> при преобразовании из int во float никакая информация не теряется
тут всё-равно нужно быть аккуратным, т.к. если int и float занимают по 4 байта, то одназначно представить любое значение int как float нельзя.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
причем тут размер в байтах?
вещественные числа иначе хранятся, потому обычный (int 32 бита который) вполне влазит. а вообще лучше обычно double Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#7 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]()
При любых преобразованиях int во float или наоборот будут потери !
У вещественных чисел 8 бит отводится под порядок, 23 бита под мантису, 1 бит под знак. Если число достаточно большое, то на самом деле теряется точность ! И происходит так называемое округление. Цитата:
warning C4244: =: преобразование "float" в "int", возможна потеря данных warning C4244: =: преобразование "int" в "float", возможна потеря данных |
|
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Не так. При преобразовании из int во float возможна потеря точности и тогда вместо 1543 мы получим что-то вроде 1542.999999999999999.
Всё это укладывается в заложенную в тип float погрешность, которую нужно учитывать при использовании этого типа. float так же плохо прибавляет к очень большому числу очень маленькое и там так же много интересного может быть, так что потери от преобразования из int в float - это вообще ничего. Цитата:
Получается, что я в своём первом посте был неправ и таки компилятор неявно даёт преобразовывать из float в int? |
|
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]() Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 18.08.2011
Сообщений: 70
|
![]()
Здравствейте!
как я говорил "ошибка одна, и указывает на функцию в которой поисходит это приведение типов" Вот код ошибки: error LNK2019: unresolved external symbol __ftol2_sse referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) если поставлю код преобразования в другую функцию - будет такая ошибка error LNK2019: unresolved external symbol __ftol2_sse referenced in function "void __cdecl kamera(void)" (?kamera@@YAXXZ) при явном приобразовании float car=10; int house=0; house = static_cast<int>(car); таже ошобка |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему у моего друга не работает програма скомпилированная в Microsoft Visual C++ 2005 Express Edition ? | pufystyj | Visual C++ | 16 | 09.02.2011 20:50 |
Преобразование типов | jungle | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 04.12.2010 19:41 |
скрит работает в interbase а в FireBird выдает ошибку | NikK1 | БД в Delphi | 9 | 13.04.2010 18:07 |
Выдает ошибку но работает.Что не так? | Студло | Помощь студентам | 1 | 01.03.2010 09:12 |
Немогу понять,почему Microsoft Visual Studio 2005 (C++) выдает ошибки? | FanEurovision | Visual C++ | 3 | 18.05.2009 20:06 |