|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - acos: DOMAIN ERROR |
|
C/C++ - acos: DOMAIN ERROR
|
Новый участник Сообщения: 17 |
Профиль | Отправить PM | Цитировать Всем здравствуйте!
В моей программе (borland c++) u находится следующим образом: x = StrToFloat(Edit1->Text); u = acos(x); и exe-шик выдает ошибку: acos: DOMAIN ERROR math.h подключена, область определения acos [-1;1]. Подозреваю, что дело тут в том, что для acos x должно быть типа double. Но как перевести float x в double x? Или как сделать так, чтобы x сразу считывалось как double? |
|
Отправлено: 01:48, 05-08-2008 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать А какие ты числа вводишь в Edit1?
Вот такой вот код прекрасно работает при числах -1..1: #include <vcl.h> #include <math.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double x = StrToFloat(Edit1->Text); double u = acos(x); Edit2->Text = FloatToStr(u); } //--------------------------------------------------------------------------- |
Отправлено: 08:01, 05-08-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать 5pliT, спасибо за ответ.
Ваш код работает. Но в моей программе все равно выдается та же ошибка. В ней я считываю х, подставляю его в формулу double z = f(x), а потом беру acos(z). Провожу проверку того, что z из [-1;1] : exe-файл в Edit9 пишет 1! Но неравенство-то строгое. Т.е. он почему-то считает что значение 1, которое принимает z строго больше 1, а потому и не может посчитать арккосинус. У кого-нибудь есть идеи почему он себя так странно ведет? Чтобы все работало было просто дописано: Но все же интересно, как сделать так, чтобы все работало "честно"? |
Отправлено: 14:21, 05-08-2008 | #3 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Както не нравится мне ваша проверочка, поробуйте лучше такую:
x>=-1.0 && x<=1.0 |
Отправлено: 15:57, 05-08-2008 | #4 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать А если вы введете в EditBOx букву, как ваша программа будет работать? Вылетит в exception? Я бы вашем месте предварительно делал проверку на соответствие типа (вроде isDouble) вводимых данных, в случае положительного ответа уже плясал бы дальше. А то, может вы вводите число, а оно конвертируется функцией неверно? Может, конечно, я сильно привык к C#, но конструкция double x = StrToFloat довольно странна. Float и Double все таки разные типы данных.
|
|
------- Отправлено: 16:12, 05-08-2008 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] При вкл.пк появляется окно и пишется nknown BIOS error. Error code =FFFF | Nataliarich | Непонятные проблемы с Железом | 1 | 10-01-2010 13:44 | |
Ошибка - [решено] Error loading operating system и disk error occurred! | Error95 | Microsoft Windows 2000/XP | 5 | 12-12-2009 14:05 | |
Mandriva/Mandrake - spamass-milter Thrown error: execution error: No such file or directory | _k4 | Общий по Linux | 1 | 24-01-2009 21:22 | |
FreeBSD - Ошибки при установке порта FreeBSD *** Error code 2 *** Error code 1 | travkog | Общий по FreeBSD | 6 | 04-08-2008 19:49 | |
Domain | OberWaffe | Сетевые технологии | 5 | 30-06-2003 19:42 |
|