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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Автоматизированная информационная система на железнодорожном вокзале http://www.cyberforum.ru/cpp-beginners/thread539560.html
Здравствуйте. Мне нужна помощь с написанием двух маленьких программок (практические работы в учебном заведении): Задание 1 Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: Номер поезда;
C++ Динамическое размещение массива структур В коде ниже создается массив из трех структур cs и инициализируется некими значениями. #include "stdafx.h" #include <iostream> struct cs { char name; double w; int cal; }; http://www.cyberforum.ru/cpp-beginners/thread539530.html
В одномерном целочисленном массиве найти минимальные элемент m и максимальный элемент М C++
В одномерном целочисленном массиве найти минимальные элемент m и максимальный элемент М. Вывести в окно Memo все целые числа из интервала (m, M), которые не входят в данный массив. Народ помогите сделать задачку, зарание спасибо.
Вылетает программа C++
Здравствуйте Написала программу, ошибок и предупреждений во время компиляции не происходит, программа вылетает при определенных условиях, как найти ошибку?
C++ Конфликт конструкторов. http://www.cyberforum.ru/cpp-beginners/thread539488.html
Здравствуйте! struct DateTime : tm { DateTime(int year_ = 1970, int month_ = 1, int day_ = 1, int hours_ = 0, int minutes_ = 0, int seconds_ = 0,
C++ Даны натуральные цифры a,b,c. Вычислите (min(a+c, a+b)+min(a-b,b-c))/(1-min(ab+c,1.2) На С++. подробнее

Показать сообщение отдельно
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
05.04.2012, 14:12     Почему не работает функция?
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;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru