On-line: Haz, Мирослав, гостей 0. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 841
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.07.08 10:40. Заголовок: error M6101


? (-31.1*0)/(-31.1*0) // m6101 , почему падает ?
? (-31*0)/(-31*0) // 0
? 0/0 //0



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 7 [только новые]


Администратор




Пост N: 938
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.07.08 11:54. Заголовок: Если сделать ? ftoc..


Если сделать

? ftoc(0)
? ftoc(0.0)
? ftoc(31.0*0)
? ftoc(-31.0*0)

то видно, что ftoc(-31.0*0) делает что-то не так


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 939
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.07.08 14:07. Заголовок: Вот описание стандар..


Вот описание стандарта double ieee 754:

http://polimage.polito.it/CodeSimulink/help/CodeSimulink/IEEE%20Standard%20754%20Floating-Point.htm

Видно, что в результате вычисления -31.0*0 получается 1 в знаковом бите, и при делении на такой "ноль с палочкой" С-библиотека генерирует runtime-error
Я вижу только один выход: написать на С процедуру, которая проверяла бы числовой параметр, и в случае ноля с палочкой возвращала бы нормальный рабоче-крестьянский ноль

В Харборе тоже, кстати, -31.0*0 получается ноль с палочкой, но, в отличие от клиппера, bcc55 позволяет на него делить

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 940
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.07.08 14:55. Заголовок: Функцию я написал, н..


Функцию я написал, но ее надо скомпилировать через MSC, которого у меня сейчас нет. BC не подходит


#include <dos.h>
#include "extend.h"

CLIPPER TrueZero( )
{
double d;
char *s;

if( _parinfo(1) & DOUBLE )
{
d = _parnd(1);
s = (char*) &d;
if(s[0]==0 && s[1]==0 && s[2]==0 && s[3]==0 && s[4]==0 && s[5]==0 && s[6]==0 && s[7]==128)
_retnd(0);
else
_retnd(d);
}
else if( ISNUM(1) )
_retni( _parni(1) );
else
_retni( 0 );
}


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 842
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.07.08 19:13. Заголовок: Pasha Спасибо !!!..


Pasha
Спасибо !!!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 121
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 11.07.08 09:20. Заголовок: Dima пишет: ? (-31...


Dima пишет:

 цитата:
? (-31.1*0)/(-31.1*0) // m6101 , почему падает ?



прикольно
5.2е не падает, в результате деления получается бесконечность с каким-то знаком
но падает на (-31.1*0)/(-31.1*0) > 0

ошибку деления на ноль они умеют обрабатывать, а на минус ноль - нет )

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 103
Зарегистрирован: 24.04.13
ссылка на сообщение  Отправлено: 15.09.15 15:56. Заголовок: Обнаружил вот что: a..


Обнаружил вот что:
a=1
b=0
c=a/b
? c

Переменная c получается =0 и в Clipper и в Harbour.
Почему не выходит ошибка деления на ноль ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3340
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.09.15 16:29. Заголовок: Обычно эта ошибка пе..


Обычно эта ошибка переопределяется в обработчике ошибок, примерно так:

if ( e:genCode == EG_ZERODIV )
return (0)
end


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 504
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет