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

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

Войти
Регистрация
Восстановить пароль
 
Dima_c8
4 / 4 / 0
Регистрация: 17.12.2011
Сообщений: 148
#1

Почему не работает функция? - C++

05.04.2012, 11:57. Просмотров 437. Ответов 2
Метки нет (Все метки)

Вот понадобилась функция для взятия остатка от деления нецелых чисел написал такую:
C++
1
2
3
4
5
6
long double OperationDouble( long double a , long double b )
{
     long double dop;
     dop = a - ( b * static_cast<long>( a / b ) );
     return dop;
}
Почему с целыми числами ( например 101 )работает прекрасно а с нецелыми (например 101.2)неправильно работает дайте пожалуйста верное решение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 11:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не работает функция? (C++):

Почему не работает функция? - C++
Почему не работает функция? Пишет ошибку: результатом выполнения фрагмента не является 0 аргумеетов int provPas() { string...

почему не работает функция? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; void function (int k)// { for(int i=0;i&lt;k;i++) std::cout&lt;&lt;&quot;*&quot;; } int...

Почему-то на работает функция!( - C++
Задача написать функцию, упорядочивающую массив по возрастанию. почему-то не работает((( #include &quot;stdio.h&quot; int FUNC_Vozr (int...

Почему функция введена, но не работает? - C++
#include&lt;iostream.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; using namespace std; int n, m, i; void vvod_data(int n) { int i; ...

Почему не работает функция Matricav? - C++
#include &lt;vcl.h&gt; #pragma hdrstop #pragma argsused #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;windows.h&gt; #include...

Почему не работает функция getline ()? - C++
Может что-то нужно дописывать? #include &lt;iostream&gt; using namespace std; int main() {

2
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
05.04.2012, 12:41 #2
Цитата Сообщение от Dima_c8 Посмотреть сообщение
Вот понадобилась функция для взятия остатка от деления нецелых чисел
Такая функция есть в стандартной библиотеке
http://www.cplusplus.com/reference/clibrary/cmath/fmod/
Цитата Сообщение от Dima_c8 Посмотреть сообщение
Почему с целыми числами ( например 101 )работает прекрасно а с нецелыми (например 101.2)неправильно работает дайте пожалуйста верное решение
Насколько я вижу, решение верное. Приведите пример, что конкретно у вас не работает.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
05.04.2012, 14:12 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
#include <stdint.h>
#include <math.h>
 
typedef union {
    double  value;
    struct {
        uint32_t    lsw;
        uint32_t    msw;
    } parts;
} ieee_double_shape_type;
 
/* Get two 32 bit ints from a double.  */
#define EXTRACT_WORDS( ix0, ix1, d )    \
    do {                                \
        ieee_double_shape_type ew_u;    \
        ew_u.value = (d);               \
        (ix0) = ew_u.parts.msw;         \
        (ix1) = ew_u.parts.lsw;         \
    } while (0)
 
/* Set a double from two 32 bit ints.  */
#define INSERT_WORDS( d, ix0, ix1 )     \
    do {                                \
        ieee_double_shape_type iw_u;    \
        iw_u.parts.msw = (ix0);         \
        iw_u.parts.lsw = (ix1);         \
        (d) = iw_u.value;               \
    } while (0)
 
static const double one = 1.0, Zero[] = {0.0, -0.0,};
 
double __ieee754_fmod( double x, double y )
{
    int32_t     n, hx, hy, hz, ix, iy, sx, i;
    uint32_t    lx, ly, lz;
 
    EXTRACT_WORDS( hx, lx, x );
    EXTRACT_WORDS( hy, ly, y );
    sx = hx & 0x80000000;       /* sign of x */
    hx ^= sx;       /* |x| */
    hy &= 0x7fffffff;   /* |y| */
 
    /* purge off exception values */
    if((hy|ly)==0||(hx>=0x7ff00000)||   /* y=0,or x not finite */
      ((hy|((ly|-ly)>>31))>0x7ff00000)) /* or y is NaN */
        return (x*y)/(x*y);
    if(hx<=hy) {
        if((hx<hy)||(lx<ly)) return x;  /* |x|<|y| return x */
        if(lx==ly)
        return Zero[(uint32_t)sx>>31];  /* |x|=|y| return x*0*/
    }
 
    /* determine ix = ilogb(x) */
    if(hx<0x00100000) { /* subnormal x */
        if(hx==0) {
        for (ix = -1043, i=lx; i>0; i<<=1) ix -=1;
        } else {
        for (ix = -1022,i=(hx<<11); i>0; i<<=1) ix -=1;
        }
    } else ix = (hx>>20)-1023;
 
    /* determine iy = ilogb(y) */
    if(hy<0x00100000) { /* subnormal y */
        if(hy==0) {
        for (iy = -1043, i=ly; i>0; i<<=1) iy -=1;
        } else {
        for (iy = -1022,i=(hy<<11); i>0; i<<=1) iy -=1;
        }
    } else iy = (hy>>20)-1023;
 
    /* set up {hx,lx}, {hy,ly} and align y to x */
    if(ix >= -1022)
        hx = 0x00100000|(0x000fffff&hx);
    else {      /* subnormal x, shift x to normal */
        n = -1022-ix;
        if(n<=31) {
            hx = (hx<<n)|(lx>>(32-n));
            lx <<= n;
        } else {
        hx = lx<<(n-32);
        lx = 0;
        }
    }
    if(iy >= -1022)
        hy = 0x00100000|(0x000fffff&hy);
    else {      /* subnormal y, shift y to normal */
        n = -1022-iy;
        if(n<=31) {
            hy = (hy<<n)|(ly>>(32-n));
            ly <<= n;
        } else {
        hy = ly<<(n-32);
        ly = 0;
        }
    }
 
    /* fix point fmod */
    n = ix - iy;
    while(n--) {
        hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
        if(hz<0){hx = hx+hx+(lx>>31); lx = lx+lx;}
        else {
            if((hz|lz)==0)      /* return sign(x)*0 */
            return Zero[(uint32_t)sx>>31];
            hx = hz+hz+(lz>>31); lx = lz+lz;
        }
    }
    hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
    if(hz>=0) {hx=hz;lx=lz;}
 
    /* convert back to floating value and restore the sign */
    if((hx|lx)==0)          /* return sign(x)*0 */
        return Zero[(uint32_t)sx>>31];
    while(hx<0x00100000) {      /* normalize x */
        hx = hx+hx+(lx>>31); lx = lx+lx;
        iy -= 1;
    }
    if(iy>= -1022) {    /* normalize output */
        hx = ((hx-0x00100000)|((iy+1023)<<20));
        INSERT_WORDS(x,hx|sx,lx);
    } else {        /* subnormal output */
        n = -1022 - iy;
        if(n<=20) {
        lx = (lx>>n)|((uint32_t)hx<<(32-n));
        hx >>= n;
        } else if (n<=31) {
        lx = (hx<<(32-n))|(lx>>n); hx = sx;
        } else {
        lx = hx>>(n-32); hx = sx;
        }
        INSERT_WORDS(x,hx|sx,lx);
        x *= one;       /* create necessary signal */
    }
    return x;       /* exact output */
}
 
int main()
{
    printf( "%f\n",           fmod( 10.24, 4. ) );
    printf( "%f\n", __ieee754_fmod( 10.24, 4. ) );
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 14:12
Привет! Вот еще темы с ответами:

Почему не работает выведенная функция - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int otd(int prin); //Прототип функции int main() { int...

Почему функция atanh работает неправильно? - C++
Задание http://content-15.foto.my.mail.ru/mail/megabayt_m/_answers/i-359.jpg Кусок кода for (double X = Xn; X &lt;= Xk; X += dX) { ...

Почему функция работает именно так? - C++
Доброго времени суток! Помогите разобраться с кодом пожалуйста У меня есть фигурка которая крутится на экране. Есть функция которая...

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


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

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

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