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

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

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

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

07.11.2013, 13:25. Просмотров 1453. Ответов 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) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
07.11.2013, 14:50  [ТС] #16
Цитата Сообщение от castaway Посмотреть сообщение
Всё выводит. http://ideone.com/l4JoPM
здесь видно, но я захожу туда с телефона, видимо сайт зависает.
В общем задача не решена, но вам за необычное решение оставлю отзыв.
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 14:51 #17
Цитата Сообщение от programina Посмотреть сообщение
В общем задача не решена
Это рабочее решение. Проверено на цикле от -10.0 до 10.0 с маленьким шагом.
1
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
07.11.2013, 14:58 #18
Цитата Сообщение от castaway Посмотреть сообщение
Это рабочее решение. Проверено на цикле от -10.0 до 10.0 с маленьким шагом.
просто в условии было
Цитата Сообщение от programina Посмотреть сообщение
без преобразования типа в int?
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 15:14 #19
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Про преобразование то я и забыл...
Можно по-другому. Тут нет явного преобразования.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
 
union my_float {
    float   value;
    struct {
        int m : 23;
        int e : 8;
        int s : 1;
    } raw;
};
 
int main() {
    for ( float R = -10; R <= 10; R += .03f ) {
        my_float mf;
        mf.value = R;
        float Q = (mf.raw.s << 1) + 1;
        printf( "%5.1f: %f\n", R, Q );
    }
    return 0;
}
http://ideone.com/RwUwJC
3
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.11.2013, 15:19 #20
SatanaXIII, что не ясно флоат к 1, как написано так и сделано
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
07.11.2013, 15:27  [ТС] #21
Вот так грубо

C++
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
 
  float R = 0.087;
 
  float Q = R;
 
  for(int i = 0; i < 1000; i++)
    Q *= 0.99;
 
  cout << 2 * ( ceil ( Q ) - 0.5 ) << endl;
}
0
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
07.11.2013, 15:47 #22
Вот вариант подойдет =) :
C++
1
float f = long(f);
В int же не преобразуем)
1
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
07.11.2013, 15:52 #23
Как такое?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool g(float a)
{
    return a > 0;
}
 
float f(float a)
{
    return  g(a) - g(-a);
}
 
int main()
{
    cout << f(-9.756456);
}
Толь с 0 не работает. 0 же нейтрален, сошлемся на это
1
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
07.11.2013, 16:08 #24
BumerangSP, а Вы знаете толк в извращениях

Добавлено через 10 минут
А как такой вариант, а?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
 
int main()
{
    string s,s1;
    float f;
    cin>>s;
    for(int i =0;i<s.length() && s[i] != '.';++i)
        s1+=s[i];
    f=atof(s1.c_str());
    cout<<f<<endl;
    system("pause");
    return 0;
}
1
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
07.11.2013, 16:12 #25
ZaMaZaN4iK,

Не по теме:

фантазия вообще штука непредсказуемая)


По коду: Programine как бы нужно, чтобы выводилось только 1 или -1.
1
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
07.11.2013, 16:15 #26
Прошу прощения, не в ту степь понесло
1
programina
07.11.2013, 16:29  [ТС]
  #27

Не по теме:

Все такие с хитрицой немного...

0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
07.11.2013, 16:36 #28
programina, насколько этот код соответствует тому, что Вы хотели?
Кстати, здесь используется ceil, приводящий к int)
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
07.11.2013, 17:20 #29
C++
1
2
float R = -20392.213123;
float Q = ((R / R ) *  ((R > 0) * 2 - 1)); //Q = -1
Добавлено через 7 минут
C++
1
2
float R = -8293123;
float Q = R / (sqrt(R*R)); //Q = -1 //убиваем знак при помощи возведения в квадрат
опять же с нулем работать ничего не будет)
1
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
07.11.2013, 17:24 #30
Raali, в первой версии зачем R/R? Всегда же 1 будет. Кроме 0 конечно.

Мой код тоже можно переписать:
C++
1
2
float f = -9.756456;
float q = (f > 0) - (-f > 0);
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 17:24
Привет! Вот еще темы с ответами:

округление printf("%.4f", (float) ans ); и printf("%.4lf", ans ); - C++
printf(&quot;%.4f&quot;, (float) ans ); printf(&quot;%.4lf&quot;, 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++
Помогите решить задачу,не могу понять как заполнить массив единицами и минус единицами в случайном порядке без нулей.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.11.2013, 17:24
Ответ Создать тему
Опции темы

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