Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
programina
2049 / 604 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Округление float до единицы - C++

07.11.2013, 13:25. Просмотров 1547. Ответов 36
Метки нет (Все метки)

Например есть число с плавающей точкой. Как его превратить в единицу без преобразования типа в int?
Желательно без использования условных операторов.
например:
C++
float R = -1.97043;
 
float Q = foo(R); // Q = -1.0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 13:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Округление float до единицы (C++):

Округление после запятой float - C++
Как прописать формат что бы после запятой было только 2 числа? Тип: FLOAT P.S. Код с пояснениями пожалуйста, изучение начал недавно.

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing - C++
#include<stdio.h> #include<stdlib.h> #include<math.h> float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} ...

Чем отличаются float преобразования (float)var от float(var) - C++
Здравствуйте! Подскажите, чем отличается (float)var от float(var)

cannot convert `float' to `float*. Почему так происходит? - C++
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже #include <stdio.h> #include <stdlib.h>...

неверное приведение void* к *float а далее к float - C++
Почему когда привожу void* к int* потом к int то все работает, данные не бьются и работают нормально, когда делаю те же операции но с...

invalid types `float[float]' for array subscript - C++
void SEARCH(float vol, float price, int i) { if (i>N) { if(price>maxprice) { ...

36
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 13:36 #2
Цитата Сообщение от programina Посмотреть сообщение
Как его превратить в единицу без преобразования типа в int?
float f = 1;
2
Raali
639 / 343 / 42
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
07.11.2013, 13:39 #3
C++
1
float R = -1.97043;
Цитата Сообщение от programina Посмотреть сообщение
float Q = foo(R); // Q = -1.0
C++
1
Q = -(R / R);
1
programina
2049 / 604 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
07.11.2013, 13:44  [ТС] #4
castaway, Raali, не то. Знак должен сохраняться. То есть было -7.678 стало -1.0, было 7.678 стало 1.0.
0
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.11.2013, 13:46 #5
C++
1
Q = R > 0? R / R : R / -R;
1
Raali
639 / 343 / 42
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
07.11.2013, 13:48 #6
C++
1
Q = R / abs(R);
1
programina
2049 / 604 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
07.11.2013, 13:51  [ТС] #7
Jazz411, а без условных операторов?

Добавлено через 2 минуты
Цитата Сообщение от Raali Посмотреть сообщение
C++
1
Q = R / abs(R);
abs() - это тот же условный оператор, но завернутый в функцию.
0
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.11.2013, 13:53 #8
programina, ну по сути разницы нет, разве что для улучшения читабельности
1
SatanaXIII
Супер-модератор
Эксперт С++
5689 / 2744 / 258
Регистрация: 01.11.2011
Сообщений: 6,699
Завершенные тесты: 1
07.11.2013, 14:04 #9
Цитата Сообщение от programina Посмотреть сообщение
было -7.678 стало -1.0, было 7.678 стало 1.0.
Может
было -7.678 стало -7.0, было 7.678 стало 7.0.
или что это за хрень?
1
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2013, 14:04 #10
могу предложить поколдовать с битами
C++
1
2
3
4
5
union foo
{
  float fvalue;
  int ivalue;
};
но выглядеть будет ужасно
чем варианты с условными операторами не угодили? неравная борьба за такты?)
2
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 14:08 #11
C++
1
2
    float R = -1.97043;
    float Q = -((float)((int32_t)R & 0x80000000 >> 30) - 1);
2
programina
2049 / 604 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
07.11.2013, 14:18  [ТС] #12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
или что это за хрень?
Нет, -7.678 должно превратиться в -1.0

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
C++
1
2
    float R = -1.97043;
    float Q = -((float)((int32_t)R & 0x80000000 >> 30) - 1);
а если R = -3.970..., то теряется знак.
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 14:28 #13
Да, ошибся.
C++
1
float Q = -((float)((*((int32_t *)&R) >> 30) & 2) - 1);
1
programina
2049 / 604 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
07.11.2013, 14:36  [ТС] #14
Цитата Сообщение от castaway Посмотреть сообщение
Да, ошибся.
C++
1
float Q = -((float)((*((int32_t *)&R) >> 30) & 2) - 1);
ideone.com не может вывести результат. И int32_t тот же самый int
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 14:39 #15
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Всё выводит. http://ideone.com/l4JoPM
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 14:39
Привет! Вот еще темы с ответами:

округление printf("%.4f", (float) ans ); и printf("%.4lf", ans ); - C++
printf("%.4f", (float) ans ); printf("%.4lf", ans ); вроде по моему пониманию мы должны на выходе получать одно и то же (анс в начале...

Ошибка cannot convert 'float' to 'float*' - C++
Здравствуйте, что означает error: cannot convert 'float' to 'float*' for argument '1' to 'int mas_time(float*, int)'? Из-за чего она...

Дано натуральное число n. Отбросить в нем все цифры, стоящие правее самой правой единицы либо оставить число без изменений, если единицы в нем нет - C++
Дано натуральное число n. Отбросить в нем все цифры, стоящие правее самой правой единицы либо оставить число без изменений, если единицы в...

Заполнить массив единицами и минус единицами и поменять единицы и минус единицы местами - C++
Помогите решить задачу,не могу понять как заполнить массив единицами и минус единицами в случайном порядке без нулей.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru