|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.02.2012, 01:47 | #1 |
Пользователь
Регистрация: 27.11.2011
Сообщений: 28
|
невыдает дробовое число
хочу написать программу для вычисления суммы ряда 1-1/3+1/5-1/7+1/9...
вроде как написал программу, но чото вычисления нету Код:
Последний раз редактировалось Stilet; 06.02.2012 в 08:39. |
06.02.2012, 01:54 | #2 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Последний раз редактировалось _Bers; 06.02.2012 в 02:00. |
|
06.02.2012, 02:04 | #3 |
Пользователь
Регистрация: 27.11.2011
Сообщений: 28
|
благодарю....тоесть это не проблема в типе переменных? я всегда думал что оно само вычислять должно...это надо задать тип для конкретных чисел?
|
06.02.2012, 02:59 | #4 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
((тип)(выражение)); Здесь, сначала будет вычислено выражение. На с++ вообще все что в скобочках - это выражения. Выражения вычисляются, и заменяются "результатом выражения" Поэтому, выше приведенная запись станет иметь вид: ((новый_тип) результат_выражения); Результат_выражения тоже имеет конкретный тип данных. Дальше идёт приведение: тип результа_выражения привести к типу, указанному слева. В результате этого вычисления, результатом выражения окажется некий временный объект, типа новый_тип и имеющий значение результат_выражения. Таким образом останется только последняя скобочка: (Результа_выражения_нового_типа); Так как здесь скобки уже роли не играют, то скобки убираются. Получаем Результат_выражния_нового_типа. Теперь более конкретный пример: ((float)(1/2)); Сначала высчитывается результат выражения (1/2) = (int 1)/ (int 2) получится ноль. Далее ноль, имеющий тип int приводится к типу float, получается 0.0f Итого: результат 0.0f Другой пример: ((int)(1/2.0f)); (int 1)/ (float) 2 в операции участвую два типа данных. На самом деле должны участвовать одинаковые типы. Поэтому, происходит автоматическое преобразование типов. Вопрос? Толи int во float, толи float в int ? Правило преобразование простое: в результате преобразования не должно быть потерь данных. Если в данном случае преобразовать в int, то float может потерять данные. Если int во float - потерь данных не будет. Следовательно, компилятор преобразует int во float Получаем: (int 1)/(float 2) = (float 1) / (float 2) = (float 0.5) Далее имеем: ((int)0.5f); число типа float преобразуется в int Поэтому, дробная часть отбросится (0); Результат вычисления - ноль. /ps что бы не путаться с типами - просто смотри, какой тип будет результатом вычисления выражения. и если ты ожидаешь другой тип - делай приведение либо одного из участников операции, либо приведение результата_вычислений, и все будет окейно |
|
06.02.2012, 03:31 | #5 |
Пользователь
Регистрация: 27.11.2011
Сообщений: 28
|
ёпт, ну ты расписал красавчик....тут токо тугодуму небудет понятно, и то под вопросом.....навсяк случай скопировал, чтобы если шо было куда смотреть)))
те в преподы надо, люди умнее станут) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как из ячейки содержащей текст и число извлечь только число? | АННА-ЕАО | Microsoft Office Excel | 35 | 02.12.2016 23:16 |
вводишь число- дает комбинацию из сумм различных чисел (от 1 до 10)составляющих это число | Jonfree | C++ Builder | 0 | 05.12.2011 22:08 |
Написать программу, которая за меньшее число ходов отгадывает загаданное число | gomz007 | Помощь студентам | 16 | 08.11.2009 12:57 |
Вывести число, предшествующее первому отрицательному и число, следующее за последним отрицательным | Rid | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 22.12.2008 16:50 |
Ввести число N и определить делится ли оно без остатка на число M (VBA) | Ivanich | Microsoft Office Excel | 7 | 24.04.2008 19:43 |