Деление на нуль происходит
Эта проверка определяет, является ли правильный операнд деления или операции модуля нулем.
#include <stdio.h>
void main() {
int x=2;
printf("Quotient=%d",100/(x-2));
}
В этом примере, знаменатель x-2
нуль.
Одна возможная коррекция должна проверять на нулевой знаменатель перед делением.
В сложном коде это затрудняет, чтобы отслеживать значения и избежать нулевых знаменателей. Поэтому это - хорошая практика, чтобы проверять на нулевой знаменатель перед каждым делением.
#include <stdio.h> int input(); void main() { int x=input(); if(x>0) { //Avoid overflow if(x!=2 && x>0) printf("Quotient=%d",100/(x-2)); else printf("Zero denominator."); } }
for
цикл#include <stdio.h>
void main() {
int x=-10;
for (int i=0; i<10; i++)
x+=3;
printf("Quotient=%d",100/(x-20));
}
В этом примере, знаменатель x-20
нуль.
Одна возможная коррекция должна проверять на нулевой знаменатель перед делением.
После нескольких итераций for
цикл, это затрудняет, чтобы отслеживать значения и избежать нулевых знаменателей. Поэтому это - хорошая практика, чтобы проверять на нулевой знаменатель перед каждым делением.
#include <stdio.h> #define MAX 10000 int input(); void main() { int x=input(); for (int i=0; i<10; i++) { if(x < MAX) //Avoid overflow x+=3; } if(x>0) { //Avoid overflow if(x!=20) printf("Quotient=%d",100/(x-20)); else printf("Zero denominator."); } }
for
цикл#include<stdio.h> void main() { printf("Sequence of ratios: \n"); for(int count=-100; count<=100; count++) printf(" %.2f ", 1/count); }
В этом примере, count
запуски от-100 до 100 через нуль. Когда count
нуль, проверка Division by zero возвращает красную ошибку. Поскольку проверка возвращается зеленый в другом for
запуски цикла, /
символ является оранжевым.
На for
существует также красная ошибка Non-terminating loop цикл. Эта красная ошибка указывает на определенную ошибку в одном из запусков цикла.
Одна возможная коррекция должна проверять на нулевой знаменатель перед делением.
#include<stdio.h>
void main() {
printf("Sequence of ratios: \n");
for(int count=-100; count<=100; count++) {
if(count != 0)
printf(" %.2f ", 1/count);
else
printf(" Infinite ");
}
}
for
цикл#include <stdio.h> #include <math.h> #define stepSize 0.1 void main() { float divisor = -1.0; int numberOfSteps = (int)((2.0*1.0)/stepSize); printf("Divisor running from -1.0 to 1.0\n"); for(int count = 1; count <= numberOfSteps; count++) { divisor+= stepSize; divisor = ceil(divisor * 10.) / 10.; // one digit of imprecision printf(" .2f ", 1.0/divisor); } }
В этом примере, divisor
запуски от –1.0 до 1,0 до 0,0. Когда divisor
0.0, проверка Division by zero возвращает красную ошибку. Поскольку проверка возвращается зеленый в другом for
запуски цикла, /
символ является оранжевым.
На for
нет никакой красной ошибки Non-terminating loop цикл. Красная ошибка не появляется, потому что Polyspace® аппроксимирует значения
divisor
более широкой областью значений. Поэтому Polyspace не может определить, существует ли определенная ошибка в одном из запусков цикла.
Одна возможная коррекция должна проверять на нулевой знаменатель перед делением. Для float
переменные, не проверяйте, ниже ли знаменатель нуля. Вместо этого проверяйте, является ли знаменатель в узком диапазоне вокруг нуля.
#include <stdio.h> #include <math.h> #define stepSize 0.1 void main() { float divisor = -1.0; int numberOfSteps = (int)((2*1.0)/stepSize); printf("Divisor running from -1.0 to 1.0\n");; for(int count = 1; count <= numberOfSteps; count++) { divisor += stepSize; divisor = ceil(divisor * 10.) / 10.; // one digit of imprecision if(divisor < -0.00001 || divisor > 0.00001) printf(" .2f ", 1.0/divisor); else printf(" Infinite "); } }
Группа: числовой |
Язык: C | C++ |
Акроним: ZDV |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.