1 / 1 / 0
Регистрация: 02.04.2015
Сообщений: 7
1

"Чудеса типа float" или "Куда девалась информация?"

04.04.2015, 20:37. Показов 718. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
кусок кода:

C++
1
2
3
4
5
6
int k=100;
float sum=0;
 for (int i=; i<k; i++)
     for(int j=1; j<i; j++)
            sum+=1/(2*j+i)
cout<<"Summa = "<<sum<<endl;

На выходе нули.
Как так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2015, 20:37
Ответы с готовыми решениями:

RhithmBox или нет. Куда девалась одна удобная (для меня) штуковина?
Немного истории. В первой установленной мною Ubuntu 10.10 была очень удобная и порадовавшая меня...

Куда текёть память или чудеса в решете
Всем привет. Я начинаю верить в чудеса. Кто нибудь сможет доказать, что их не бывает?)))...

А куда девалась память?
Доброе утро всем.Нечайно открыл ярлык на рабочем столе &quot; СИСТЕМА &quot;(он стоит рядом с ярлыком...

преобразование чисел типа float в двоичные, изменение в двоичном коде и вывод нового числа типа float
Vообщем немного не стандартная задача. Мне нужно преобразовать десятичное число float в двоичное. И...

Определить, куда выводится информация - в файл или на экран?
Write(A,B)

12
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
04.04.2015, 20:40 2
C++
1
sum+=1./(2*j+i);
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
04.04.2015, 20:47 3
Первая заповедь Сишника
1/2=0
1
1 / 1 / 0
Регистрация: 02.04.2015
Сообщений: 7
04.04.2015, 20:53  [ТС] 4
(j-i+1)/(j+i)
C++
1
(j-i+1)*1.0/(j+1)
аминь
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
04.04.2015, 21:34 5
chkhan, умножать на единицу - это конечно круто!
Уж раз у нас С++, то пишем так:
C++
1
static_cast<double>(j-i+1)/(j+1)
0
1 / 1 / 0
Регистрация: 02.04.2015
Сообщений: 7
04.04.2015, 21:38  [ТС] 6
я же не против ) учите меня полностью )))
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
04.04.2015, 21:43 7
Для Си (и для плюсов, конечно, тоже) можно так
(double)(j-i+1)/(j+1)
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.04.2015, 22:30 8
(и для плюсов, конечно, тоже можно, но нежелательно)

Добавлено через 37 секунд
Распространенные ошибки
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
04.04.2015, 23:24 9
Цитата Сообщение от MrGluck Посмотреть сообщение
тоже можно, но нежелательно)
А почему? Не в стиле, да? Не комильфо? Сложности с религиозными запретами? Мама не велит?
ИМХО, если одна конструкция работает на одной платформе, а вторая - на двух (причем, абсолютно также как и на той одной), то предпочтение следует отдать второй. Или идея в том, чтобы максимально усложнить миграцию с Плюсов на чистый Си?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.04.2015, 01:08 10
Цитата Сообщение от Байт Посмотреть сообщение
А почему? Не в стиле, да? Не комильфо? Сложности с религиозными запретами? Мама не велит?
Да, не в стиле.
Да, не комильфо.
Нет сложностей.
Скорее папа
Цитата Сообщение от Байт Посмотреть сообщение
Или идея в том, чтобы максимально усложнить миграцию с Плюсов на чистый Си?
Идея в том, чтобы писать на С++, а не С с классами. Языки имеют совершенно разные подходы. И если легаси код не давит, то писать лучше в соответствии с последними рекомендациями языка т.к. это более соответствует стилю и скорее всего безопаснее.

Конкретно в данной ситуации.
1) Приведение типов является неким хаком, нестандартным поведением. И лучше об этом подчёркивать самым наглядным образом. Код с кастами должен вызывать подозрения и бросаться в глаза.
2) Круглые скобки используются не только для приведения, лучше не нагружать одну и ту же конструкцию различным логическим смыслом.
3) Приведение типов в С явно не показывает какой тип преобразований используется (убирается const, приводятся типы, допускающие преобразование, или же мы говорим компилятору "заткнись и сделай как я хочу")
4) Приведение в стиле С небезопасно т.к. оно сначала пробует привести по аналогу static_cast, потом по аналогу const_cast (что в С++ коде почти всегда настораживает), а затем reinterpret_cast, а это уже не даёт ни малейшего шанса компилятору пискнуть о проблеме. static_cast же выдаст ошибку компиляции. А это предпочтительнее ошибки выполнения.
1
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
05.04.2015, 08:12 11
К тому же, если использовать правильный плюсовой стиль, можно сэкономить на скобках:
double(j-i+1)/(j+1)
0
698 / 105 / 19
Регистрация: 22.06.2014
Сообщений: 234
05.04.2015, 09:39 12
Цитата Сообщение от Nick Alte Посмотреть сообщение
К тому же, если использовать правильный плюсовой стиль, можно сэкономить на скобках:
double(j-i+1)/(j+1)
А в плюсах это может означать не только преобразование типа, но и создание временного объекта с передачей выражения в скобках в качестве аргумента для конструктора.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
05.04.2015, 18:46 13
Цитата Сообщение от Martein Посмотреть сообщение
А в плюсах это может означать не только преобразование типа, но и создание временного объекта с передачей выражения в скобках в качестве аргумента для конструктора.
Не "может означать", а означает. Потому-то я и сказал про "плюсовой стиль".
Собственно, именно создание нового объекта и проделывает как static_cast из int в double, так и аналогичное C-style преобразование.
0
05.04.2015, 18:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2015, 18:46
Помогаю со студенческими работами здесь

"Значение типа float* нельзя использовать для инициализации сущности типа float"
#include &lt;math.h&gt; #include&lt;iostream&gt; #include &lt;iomanip&gt; #include&lt;conio.h&gt; using namespace std;...

2-ичное представление числа типа double или float?
помогите разобратся,,,, плиз)) double a=1991.829; a==01000000 10011111 00011111 01010000 11100101...

Перевести массив цифр в число типа int или float
Всем здрасти , а не подскажет ли кто часом, можно ли массив с цифрой в каждом злементе (a=1, a=3,...

Округление числа типа float до 15 или 16 чисел после запятой
Добрый день. Возник такой вопрос, при округлении числа 85.9992322893416 до 16 или 15 чисел после...

Как проверить вводилось ли число (типа double или float) в консоль
Как проверить вводилось ли число (типа double или float) в консоль?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru