Vaclav_
Прежде чем какая-то полиция встревожится , я предлагаю перенести это на настоящий дискуссионный форум.
К сожалению, из-за некоторых технических трудностей с местным интернет-провайдером часть поста была пропущена.
Я обычно проверяю входы, чтобы предотвратить Гиго.
Итак, чтобы вернуться к решению и пропустить весь лишний пух - если я добавлю
радиус = .1;
как указано - все хорошо.
????
Это для тех, кто хотел увидеть код.
// radius difference
float radius_new = (float) IMG_circle[1].radius - (float) IMG_circle[0].radius;
printf("\nradius differece between base and cicrcle %i %f", R,
radius_new);
float hypotenuse;
float hypotenuse_new;
//radius = .1;
hypotenuse = 1.0 - .1; //- (double) radius;
//printf("\nhypotenuse of cicrcle %i %f", (int) R,
// hypotenuse);
// BUG
float base = 1.0;
hypotenuse_new = base - (float) radius_new; // (float) radius;
hypotenuse_new = base -( (float) IMG_circle[1].radius - (float) IMG_circle[0].radius);
printf("\nBase circle radius %f ",(float) IMG_circle[0].radius);
printf("\nCurrent circle radius %f ",(float) IMG_circle[1].radius);
printf("\ndiff (hypotenuse_new) %f ",(float) IMG_circle[1].radius - (float) IMG_circle[0].radius);
printf("\ndiff (hypotenuse_new) %f ",(float) IMG_circle[0].radius - (float) IMG_circle[1].radius);
printf("\nnew hypotenuse of circle of radius %f %i %f", radius_new, (int) R,
(float) hypotenuse_new);
А вот и текущий выход
radius differece between base and cicrcle 0 0.100000
Base circle radius 1.000000
Current circle radius 0.909091
diff (hypotenuse_new) -0.090909
diff (hypotenuse_new) 0.090909
new hypotenuse of circle of radius -0.090909 0 1.090909
hypotenuse of cicrcle 1 0.810000
Пожалуйста, обратите внимание, что первый printf печатает положительный радиус - что я предположил, было правильно.
При использовании тех же значений изменился "текущий радиус окружности".
Я действительно не уверен, где моя ошибка и как ее решить.
И это только начало расчетов...
// radius difference
float radius = IMG_circle[1].radius - IMG_circle[0].radius;
printf("\nradius differece between base and cicrcle %i %f", R,
radius);
float hypotenuse;
hypotenuse = 1.0 - .1; //- (double) radius;
printf("\nhypotenuse of cicrcle %i %f", (int) R + 1,
hypotenuse);
radius = .1;
hypotenuse = 1.0 - (float) radius;
printf("\nhypotenuse of cicrcle %i %f", (int) R + 1,
hypotenuse);
radius differece between base and cicrcle 0 0.100000
hypotenuse of cicrcle 1 0.900000
hypotenuse of cicrcle 1 1.090909
Richard MacCutchan
Что такое R
- и что именно ты пытаешься сделать? Все, что я вижу, - это то, что вы печатаете разницу между 1,0 и 0,1. и вы уже должны знать о врожденных проблемах точности с числами с плавающей запятой.