.: [предыдущая | оглавление | следующая] :.

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

Внимательно изучите листинг умножение чисел одинаковое - результат вычислений разный! Если у Вас друга ОС или система программирования, то результат может другим. Отсюда результаты моделирования или расчеты могут отличаться друг от друга.

.: [предыдущая | оглавление | следующая] :.