5.2 Проблемы плавающего формата
Для представления вещественных чисел
разработан вещественный формат. Этот формат предполагает, что в Си
имеется следующие типы плавающей запятой:
float, double, long
double.
-
#include <conio.h>
#include <stdio.h>
#include <float.h>
void main( void
)
{
double
a = 0.10000001;
/* Show
original control word and do calculation. */
printf( "Original:
0x%.4x\n", _control87( 0, 0 ) );
printf( "%1.8f * %1.8f =
%.15e\n", a, a, a * a );
/* Set
precision to 24 bits and recalculate. */
printf( "24-bit:
0x%.4x\n", _control87( PC_24, MCW_PC ));
printf( "%1.8f * %1.8f =
%.15e\n", a, a, a * a );
/* Restore
to default and recalculate. */
printf( "Default:
0x%.4x\n",
_control87( CW_DEFAULT, 0xfffff ) );
printf( "%1.8f * %1.8f
=%.15e\n", a, a, a * a );
getch();
}
Листинг работы
программы
(Cbuilder-5,Windows-XP)
Original:0x1372
0.10000001 *0.10000001
=1.000000200000010e-02
24-bit:0x1072
0.10000001 *0.10000001
=1.000000121208832e-02
Default:0x825ff
0.10000001 *0.10000001
=1.000000200000009e-02
Внимательно изучите листинг умножение чисел одинаковое
- результат вычислений
разный! Если у Вас
друга ОС или система программирования, то результат может
другим. Отсюда
результаты моделирования или расчеты могут отличаться друг от
друга.
|