mserg писал(а):
...полная чушь. Но, не суть.
#include <stdio.h>
#include <float.h>
__int64 mask[53];
void initmask()
{
  mask[52] = 0;
  mask[51] = 1;
  for (int i = 51; i--; i>0)
    mask[i] = 2*mask[i+1]; 
  for (int i = 52; i--; i>0)
    mask[i] += mask[i+1];
}
double succval (double x)
{
  volatile double r;
  _controlfp(  _RC_UP, _MCW_RC );
  r = x + DBL_EPSILON;
  _controlfp( _RC_NEAR, _MCW_RC );
  return r;
} 
double round2down(double x, int p)
{
  p--;
  __int64* x_ = (__int64*)&x;
  volatile double y;
  __int64* y_ = (__int64*)&y;
  if (x >= 0)
    *y_ = *x_ & ~mask[p];
  else 
    if (*x_ & mask[p])
    {
      *y_ = *x_ | mask[p];
      y = succval(y);
    }
    else y = x;
  return y;
}
double round2up(double x, int p)
{
  return -round2down(-x,p);
}
int main()
{
  initmask();        
  double x = 2*7/3.0;
  int p = 1;
  printf("x=%f, p=%d, down(x)=%f, up(x)=%f\n", x, p, round2down(x,p), round2up(x,p));
  return 0;
}
Есть тут какой-нибудь изъян?
Код:
void initmask()
{
  mask[52] = 0;
  mask[51] = 1;
  for (int i = 51; i--; i>0)
    mask[i] = 2*mask[i+1];
 постольку поскольку в 52-й ячейке массива 0, то весь массив будет заполен 0, кроме нулевой ячейки
Код:
  for (int i = 52; i--; i>0)
    mask[i] += mask[i+1];
 берем то, что лежит за пределами массива и заполняем этим тот же массив????? опять таки кроме нулевой ячейки, что, впрочем сильно не отличается от того что в других ячейках
Код:
}
Я в генетическом программировании не понимаю, но какой великий смысл этой функции?
Далее
Код:
double round2down(double x, int p)
{
  p--;
  __int64* x_ = (__int64*)&x;
  volatile double y;
  __int64* y_ = (__int64*)&y;
  if (x >= 0) 
если указателю присвоен некий адрес, то указатель всегда будет больше нуля    
Код:
*y_ = *x_ & ~mask[p];
 в ячейке mask[0] лежит полная чушь, 
и в далее мы вообще никогда не попадем.
Код:
  else 
    if (*x_ & mask[p])
    {
      *y_ = *x_ | mask[p];
      y = succval(y);
    }
    else y = x;
  return y;}
получим полную чушь с typesize = 64 бита
Это называется генетическим программированием???? Что-то я отстал от всех этих новшеств.