Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Ф-ия sqrt


Автор: rthsobakas 6.11.2008, 21:37
мне надо в переменную типа int записать значение sqrt

Код

       double rt=Sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));
       MPrima[i][j]=(int)rt;


но на строчке с double выдается ошибка project raised exception  class EInvalidOp with message 'Invalid floating point operation'

То есть че то с типами, помогите разобраться.

Автор: mes 6.11.2008, 22:11
Sqrt генерирует EInvalidOp исключение, когда аргумент отрицательный 

Автор: Great Cornholio 7.11.2008, 16:43
Цитата(mes @  7.11.2008,  01:11 Найти цитируемый пост)
Sqrt генерирует EInvalidOp исключение, когда аргумент отрицательный 

О_О, там же сумма квадратов!)) как так?))

Автор: YanTsys 7.11.2008, 17:26
Какой тип у переменных x1 x0 y1 y0 и какие значения присвоены этим переменным перед вылетом ошибки?

Автор: Great Cornholio 7.11.2008, 17:32
кста, тупо конечно, но попробуй:

Код

double rt=Sqrt(((x1-x0)*(x1-x0))+((y1-y0)*(y1-y0)));
       MPrima[i][j]=(int)rt;

Автор: fronya 8.11.2008, 18:32
А может нужно все-таки написать Sqrt не с большой буквы  smile 
У меня лично все прекрасно работает:
Код

#include <math.h>
double x1,x0,y1,y0;
 x1=0,2;
 x0=0.3;
 y1=0.8;
 y0=0.7;
double rt=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));
Edit1->Text=AnsiString(rt);


Или у тя в другом проблема.... ( и проверь типы данных, может там не состыковочка вышла) 

Автор: volvo877 8.11.2008, 19:13
Цитата(fronya @  8.11.2008,  17:32 Найти цитируемый пост)
У меня лично все прекрасно работает:
Еще бы... У тебя вообще ни одного отрицательного множителя не присутствует... Или ты все еще думаешь, что x1 будет меньше, чем x0 ???

Автор: de_Nis 9.11.2008, 09:04
fronya,  странно, что приведенный в сообщении код вообще работает:  x1=0,2; (в третьей строке) содержит в качестве десятичного разделителя запятую, а не точку. Или для  C++ Builder это не имеет значения?

Автор: Alexeis 9.11.2008, 16:15
  И  еще одно предположение, по скольку сумма квадратов не может быть отрицательной, может быть переполнение инта как аргумента функции. Если он больше 2х Млрд то число станет отрицательным и функция попытается вычислить корень отрицательного числа.

Автор: rthsobakas 9.11.2008, 17:03
мда, вообщем там не double ,  а  float тип должен был стоять(хотя в хелпе дубл написан).

Автор: Great Cornholio 11.11.2008, 10:47
а не sqrtl ли? кстати)) непомню чем точно различаются, но l - long

Автор: YanTsys 11.11.2008, 13:21
Цитата(Alexeis @ 9.11.2008,  16:15)
И  еще одно предположение, по скольку сумма квадратов не может быть отрицательной, может быть переполнение инта как аргумента функции. Если он больше 2х Млрд то число станет отрицательным и функция попытается вычислить корень отрицательного числа.

Так же подумал, поэтому и хочется узнать при каких значениях  x1 x0 y1 y0 программа выдает ошибку smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)