Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Периоды в Delphi

-=[ 13 октября 2004 г. # среда # 12:16:12 # GMT+0200 ]=-
Привета!

Такая во проблемма:
a:extended;

a:=1/3;

Invalid Floating Point Operation :(

Как обрезать extended на определенном знаке после запятой?

Ответить   -=[-B0(R)MaN-]=- Wed, 13 Oct 2004 12:17:44 +0300 (#244127)

 

Ответы:

1) Никакого Инвалида не наблюдается :)) - чей-то у Вас не так, как написали
2) a:=round(a*1000)/1000;

Ответить   Wed, 13 Oct 2004 14:45:27 +0400 (#244165)

 

-=[Здрасте!]=-
13 октября 2004 г. /среда 13:45:27/ Surin_bp |E-Mail: <mailto:surin_***@m*****.ru>|
в мессаге <<Периоды в Delphi>> накрапал:

[B~E~G~I~N~>

Surin_bp> 1) Никакого Инвалида не наблюдается :)) - чей-то у Вас не так, как
написали
Surin_bp> 2) a:=round(a*1000)/1000;
[E|.|N|.|D|.>
Да писал я так :( Это стандартная фишка.
Суть в том, что там не конкретно 1/3, а просто пары чисел, которые при делении
дают числа с периодами. Комп побует все их вместить (периоды эти) и пишет ошибочку.

Ответить   -=[-B0yMaN-]=- Wed, 13 Oct 2004 20:21:42 +0300 (#244369)

 

Hello -=[-B0yMaN-]=-,

Wednesday, October 13, 2004, 10:21:42 PM, you wrote:

ошибочку.

Не вижу смайлика 8(
FPU процессора ничего не знает о понятии "периодическая дробь"!
Вычисляется столько значащих цифр, сколько позволяет точность формата.
Похоже, никому до сих пор не удалось повторить эту ошибку :)

Ответить   Thu, 14 Oct 2004 18:06:59 +0500 (#244899)

 

Привет Rooslan,

Thursday, October 14, 2004, 5:06:59 PM, вы писали:

Может у тебя каким-то макаром FPU вылетело :-))
А ошибки a:=1/3; никогда не было и не будет при любом "дробном" типе a
Ошибка скорее всего Run time error, так что ищи ошибку в логике
программы!!!

Афоризм напоследок: Ничто так не ограничивает мировоззрение как размеры зарплаты.
15 октября 2004 г. 22:24:49

Просто студент
Eugene mailto:rav***@o*****.ru

Номер выпуска : 3699
Возраст листа : 390 (дней)
Количество подписчиков : 487
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/245843
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Fri, 15 Oct 2004 22:28:38 +0400 (#245843)

 

-=[Хайушки!]=-
15 октября 2004 г. /пятница 21:28:38/ Eugene |E-Mail: <mailto:rav***@o*****.ru>|
в мессаге <<Периоды в Delphi>> накрапал:

[B~E~G~I~N~>
Eugene> Привет Rooslan,
Eugene> Thursday, October 14, 2004, 5:06:59 PM, вы писали:

~~~< Message on address 0x00000000 cannot be read (written) >[E|.|N|.|D|.>

Да с ФПУ все ок! Спасибо Алексу Томилову! Натолкнул на мысль... :beer: хотя сам
был немног не прав ;)

Ответить   -=[-B0yMaN-]=- Wed, 20 Oct 2004 22:33:43 +0300 (#248658)

 

Hello Surin_bp,

Wednesday, October 13, 2004, 3:45:27 PM, you wrote:

Ошибки действительно никакой нет (и быть не может).

Есть еще функция RoundTo, но она принимает и возвращает Double. Вам
действительно нужна вся точность Extended?

Ответить   Wed, 13 Oct 2004 18:51:00 +0500 (#244382)

 

-=[Привет!]=-
13 октября 2004 г. /среда 13:45:27/ Surin_bp |E-Mail: <mailto:surin_***@m*****.ru>|
в мессаге <<Периоды в Delphi>> накрапал:

[B~E~G~I~N~>

Surin_bp> 1) Никакого Инвалида не наблюдается :)) - чей-то у Вас не так, как
написали
Surin_bp> 2) a:=round(a*1000)/1000;
[E|.|N|.|D|.>
Видать вся фигня не в этом :( Уже дошло до того, что
A=63
B=0.11

delX:=B/A; Error!!!Invalid Floating Point Operation

NOP:=A; Error!!!Invalid Floating Point Operation

Что это за лажа?????????

Ответить   -=[-B0yMaN-]=- Wed, 13 Oct 2004 21:12:37 +0300 (#244396)

 

Здравствуйте, -=.

Вы писали 13 октября 2004 г. в 12:17:44 [GMT +2:00]:

Я использую вот такую функцию. Очень хорошо это делает.

Delphi:

function MyRoundEx(const X, N : Extended): Extended;
{N : 1 - до целых, 10 - до десятых, 100 - до сотых...}
var
ScaledFractPart, Temp : Extended;
begin
ScaledFractPart := Frac(X) * N;
Temp := Frac(ScaledFractPart);
ScaledFractPart := Int(ScaledFractPart);
if Temp >= 0.5 then ScaledFractPart := ScaledFractPart + 1;
if Temp <= -0.5 then ScaledFractPart := ScaledFractPart - 1;
Result := Int(X) + ScaledFractPart / N;
end;

C++Builder:

double MyRoundEx(double X, double N)
{
double ScaledFractPart, Temp;
ScaledFractPart = X * N;
Temp = modf(ScaledFractPart, &ScaledFractPart);
if (Temp >= 0.5)
ScaledFractPart += 1;
if (Temp <= -0.5)
ScaledFractPart -= 1;
return ScaledFractPart;
}

Ответить   Feniks Wed, 13 Oct 2004 12:51:54 +0300 (#244380)