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

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

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

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

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

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

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

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

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

Но если я для проверки через цикл ввожу несколько данных от руки всё нормально.
Внимание вопрос: Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17306 / 5554 / 347
Регистрация: 30.03.2009
Сообщений: 15,114
Записей в блоге: 26
19.05.2009, 20:05     Ошибка при объявлении массива #2
Покажи весь исходник и покажи, что пишет компилятор (с прявязкой к номеру строки)
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.
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
20.05.2009, 10:34     Ошибка при объявлении массива #4
В суть задачи особо не вникал пока, но у меня всё компилируется нормально.. Убрал задание начальных значений, естественно - у тебя они все не указаны.. Сделал просто arctangens[0] = 0.785398 сразу после объявления - компилируется без единй ошибки и даже без предупреждений.. И строится тоже.
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), то вылазит ошибка.
Evg
Эксперт CАвтор FAQ
17306 / 5554 / 347
Регистрация: 30.03.2009
Сообщений: 15,114
Записей в блоге: 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 - нигде таких предупреждений не вылезало
zeubr
2 / 2 / 1
Регистрация: 17.05.2009
Сообщений: 22
20.05.2009, 13:20  [ТС]     Ошибка при объявлении массива #7
Спасибо большое,
я тоже уже нашел решение, но мне пришлось его обмануть.
Я умножил все значения массива на 1.0e+300 и получил степени от 217 до -317, а потом результат вычислений разделил на это число.
Твоё решение наверное более правильное.

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

Маленький вопрос: как завершать темы на этом форуме?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
20.05.2009, 13:27     Ошибка при объявлении массива #8
Цитата Сообщение от zeubr Посмотреть сообщение
Маленький вопрос: как завершать темы на этом форуме?
модераторы завершают, если посчитают нужным.
Gravity
557 / 551 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
20.05.2009, 13:34     Ошибка при объявлении массива #9
Цитата Сообщение от zeubr Посмотреть сообщение
А насчёт версии я и сам не знаю, просто установил ubuntu а компилер уже там.
gcc --version
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2009, 13:45     Ошибка при объявлении массива
Еще ссылки по теме:

Ошибка при объявлении функции в заголовочном файле C++
Инициализация массива при объявлении C++
Ошибка при объявлении типа C++
Ошибка компиляции при объявлении массива C++
Ошибка при объявлении структуры C++

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

Или воспользуйтесь поиском по форуму:
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.

получается всё новое это хорошо испорченное старое.
Yandex
Объявления
20.05.2009, 13:45     Ошибка при объявлении массива
Ответ Создать тему
Опции темы

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