Я отладки производства код, написанный на C и его простейшей форме можно представить в виде -32-битное целочисленное деление дает 0x7fffffff в качестве фактора на PowerPC
void
test_fun(int sr)
{
int hr = 0;
#define ME 65535
#define SE 256
sr = sr/SE; <-- This should yield 0
if(sr == 1)
hr = ME;
else
hr = (ME+1)/sr; <-- We should crash here.
}
Мы проходим sr
, как 128, который в идеале должен дать в делении на нулевую ошибку в процессоре. Я вижу, что это деление происходит успешно с частным как 0x7ffffffff (hr
- это значение). Это не происходит (он падает при попытке деления на ноль), когда я компилирую и запускаю то же самое на платформе Intel с помощью gcc.
Хотите знать принцип этого большого частного. Не уверен, что это просто какая-то другая ошибка, которую мне еще нужно раскрыть. Может кто-нибудь помочь мне с другой программой, которая делает то же самое?
Целочисленное деление на ноль дает * неопределенное поведение *. Вы должны выполнить явную проверку для 'sr == 0'. –
Я считаю, что на PowerPC это даст какое-то исключение. Работает ли он на какой-то операционной системе или в виде голого металла? –
@Eugene: он имеет NetBSD 5.1 в качестве операционной системы –