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

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

Войти
Регистрация
Восстановить пароль
 
zeubr
2 / 2 / 1
Регистрация: 17.05.2009
Сообщений: 22
#1

Ошибка при объявлении массива - C++

19.05.2009, 17:31. Просмотров 1002. Ответов 9
Метки нет (Все метки)

Здраствуйте.

Я кое чего не понимаю:

В программе используется массив: long double myarray[2048]={3.16202e-322, 1.58101e-322}; с числами такого типа.

При компиляции выдает ошибку: "предупреждение: деление на ноль плавающей константы"

Но если я для проверки через цикл ввожу несколько данных от руки всё нормально.
Внимание вопрос: Что не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2009, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при объявлении массива (C++):

Ошибка при объявлении массива - C++
У меня такая проблема... Я хочу объявить массив из М элементов, где М это константа. И в итого Си говорит, что нужно выражение в ??? что...

Ошибка компиляции при объявлении массива - C++
using namespace std; const char IDSounds = { { "1", "sound1.wav", "5BE4A5E9CA66EF70748ED87D3137844D" }, {...

Ошибка в объявлении массива - C++
Мне Вижуал Студия выдает список ошибок. Не пойму, чего от меня хочет. Вроде все правильно... #include "stdafx.h" #include <iostream> ...

Ошибка при объявлении структуры - C++
При компиляции ругается на заголовочный файл: //*************************************************************************** typedef...

Ошибка при объявлении структуры - C++
Ошибка при объявлении структуры # include <iostream> # include <windows.h> using namespace std; struct MyStruct { int...

Ошибка при объявлении типа - C++
Как устранить ошибку? class B; class A { public: B getB() { return B(); }

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Evg
Эксперт CАвтор FAQ
17801 / 6007 / 387
Регистрация: 30.03.2009
Сообщений: 16,508
Записей в блоге: 26
19.05.2009, 20:05 #2
Покажи весь исходник и покажи, что пишет компилятор (с прявязкой к номеру строки)
0
zeubr
2 / 2 / 1
Регистрация: 17.05.2009
Сообщений: 22
20.05.2009, 08:23  [ТС] #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
//cordec algorithm
#include <iostream>
 
 
using namespace std;
 
int main()
{
  int n, d;
  long double a, x, y, z, u;        // ниже приведена таблица atan(2^(-n)) где n принимает значения от 0 до 2048
  long double arctangens[2048]={0.785398, 0.463648, 0.244979, 0.124355, 0.0624188, .........и так 2048 числа.............7.92153e-615, 3.96076e-615, 1.98038e-615, 9.90191e-616, 4.95095e-616, 2.47548e-616, 1.23774e-616, 6.18869e-617};
  
  cout<<"sinuswert:   ";
  cin>>y;
  cout<<"cosinuswert: ";
  cin>>x;
 
  a=1, z=0;
 
    for (n=0; n<2048; n++)
    {
 
      if (y<0)
    d=1;            // здесь определяется нужно увеличить угол или уменьшить
      else 
    d=-1;
 
    z=z-d*arctangens[n];       // собственно cordec алгоритм
    u=x;
    x=(x-d*y*a);
    y=(y+d*u*a);
    a=a/2;          // a расчитывается по формуле 2^(-n)
 
    }
 
  cout<<"phi bogenmaГџ: " <<z <<"\n";
  cout<<"phi grad: " <<z*(180/3.14159265) <<"\n";
  return 0;
}
и вот так ругается компилятор

alex@alex-desktop:~$ g++ proba2.cpp
proba2.cpp:11: предупреждение: деление на ноль плавающей константы
proba2.cpp:11: предупреждение: деление на ноль плавающей константы
proba2.cpp:11: предупреждение: деление на ноль плавающей константы таких сообщений порядка 1000

и сообщение он выводит только для чисел "2.47033e-324" и до "6.18869e-617"
это числа с n=1076 и дальше
если заменить массив функцией или вводить значения от руки все нормально

Добавлено через 8 часов 57 минут 0 секунд
Мне кажется, что я как то не правильно описываю массив.
Компилятор автоматически округляет числа до "double" а получается 0.
0
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
20.05.2009, 10:34 #4
В суть задачи особо не вникал пока, но у меня всё компилируется нормально.. Убрал задание начальных значений, естественно - у тебя они все не указаны.. Сделал просто arctangens[0] = 0.785398 сразу после объявления - компилируется без единй ошибки и даже без предупреждений.. И строится тоже.
0
zeubr
2 / 2 / 1
Регистрация: 17.05.2009
Сообщений: 22
20.05.2009, 11:11  [ТС] #5
дело в том, что у меня тоже всё компилируется при значениях arctangens[o....и до 1076] это соответсвует числам (0.785398.......2.47033e-324), а если я беру значения меньшие (от 1.23516e-324....и до....6.18869e-617), то вылазит ошибка.
0
Evg
Эксперт CАвтор FAQ
17801 / 6007 / 387
Регистрация: 30.03.2009
Сообщений: 16,508
Записей в блоге: 26
20.05.2009, 12:44 #6
После констант ставь букву L. По умолчанию константы строятся в формате double, а тебе нужноlong double. Т.е.
long double arctangens[2048]={0.785398L, 0.463648L,...

Добавлено через 32 секунды
Ошибка вылезает из-за того, что слишком меленькие значения в формат double уже не влезают

Добавлено через 21 минуту 49 секунд
Что у тебя за версия gcc? Пробовал на gcc-2.95.3, gcc-3.4.6 и gcc-4.1.2 - нигде таких предупреждений не вылезало
1
zeubr
2 / 2 / 1
Регистрация: 17.05.2009
Сообщений: 22
20.05.2009, 13:20  [ТС] #7
Спасибо большое,
я тоже уже нашел решение, но мне пришлось его обмануть.
Я умножил все значения массива на 1.0e+300 и получил степени от 217 до -317, а потом результат вычислений разделил на это число.
Твоё решение наверное более правильное.

А насчёт версии я и сам не знаю, просто установил ubuntu а компилер уже там.

Маленький вопрос: как завершать темы на этом форуме?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
20.05.2009, 13:27 #8
Цитата Сообщение от zeubr Посмотреть сообщение
Маленький вопрос: как завершать темы на этом форуме?
модераторы завершают, если посчитают нужным.
1
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
20.05.2009, 13:34 #9
Цитата Сообщение от zeubr Посмотреть сообщение
А насчёт версии я и сам не знаю, просто установил ubuntu а компилер уже там.
gcc --version
1
zeubr
2 / 2 / 1
Регистрация: 17.05.2009
Сообщений: 22
20.05.2009, 13:45  [ТС] #10
EVG если тебе интересно насчёт компилятора:

alex@ubuntu:~$ gcc --version
gcc.real (Ubuntu 4.3.3-5ubuntu4) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.

получается всё новое это хорошо испорченное старое.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2009, 13:45
Привет! Вот еще темы с ответами:

Ошибка при объявлении функции класса - C++
функция определена: class krug{ // ... void sr(krug ob); // ... } // ... void krug::sr(krug ob){ double s1,s2;

Инициализация массива при объявлении - C++
Здравствуйте Маленький вопросик как проинициализировать массив при определении? template &lt;class T&gt; class myClass { private:...

Ошибка при объявлении вектора- поля структуры - C++
при объявлении вектора полем структуры компилятор выдает ошибку C2059 в месте, где задается размер вектора: причем при объявлении...

Ошибка при объявлении функции в заголовочном файле - C++
Здравствуйте! Я пытаюсь в заголовочном файле объявить вот такой метод: test.h #include &lt;string&gt; #include &lt;vector&gt; class...


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

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

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