���������_���^�ƌ덷

�v���O���~���OB�̃y�[�W�֖߂�

���������_��

�L����

�b����ň���������l�́C�Q�i���̗L�������ŕ\���ꂽ���l�ł���D�Ⴆ�Ύ��̂悤�Ȃ��̂ł���D
1.5(10) = 1.1(2)
3.25(10) = 11.01(2)
���_�I�ɂ͏����������ɑ����l�ł��C���̂����̗L���‚̌����ł��̒l��\�������Ȃ��D �Ⴆ�΁C0.1 ���Q�i���̏����ŕ\����
0.1(10) = 0.000110011001100110011...(2)
�Ɩ����ɑ������C�R���s���[�^�̓����ł͗L�����Ŋۂ߂��Ă���D ���̂悤�ȏꍇ�ɂ́C�{���̒l�ł͂Ȃ��C�ߎ��l�ł����\�����Ƃ��ł��Ȃ��D

�w���\�L�i���������_�\�L�j

�Ȋw�v�Z�ł͔��ɑ傫�Ȏ����l����ɏ����Ȏ����l���������Ƃ�����D ���̂悤�ȂƂ��ɂ́C�ʏ�̂P�O�i���̕\�L�ł͂Ȃ��āC���̂悤�Ȏw���\�L�ŕ\����� ���ʂ� 000...000 �Ƃ�������\�L���Ȃ��Ă��悭�Ȃ�D
12345678900000000000000000000 = 1.23456789 * 1028
0.00000000000000000000123456789 = 1.23456789 * 10-21

����́C�Q�i���\���ł������ŁC
110110100100000000000000000000000 = 1.101101001 * 232
0.00000000000000000000000001101101001 = 1.101101001 * 2-26
�Ǝw���\�L���邱�Ƃ��ł���D

���̂悤�Ȏw���\�L�́C 1.101101001 �Ƃ����l�������C32 ����� -26 �Ƃ����l���w���ƌĂԁD

�����Ǝw���Ɓi����Ɂ{�|�̕����Ɓj��p���ĕ\���ꂽ�����l�̂��Ƃ𕂓������_���ƌĂԁD

float �^

float�^��4�o�C�g��32�r�b�g�̃T�C�Y�������C���̃r�b�g�����̂悤�ɁC�����C�w���C������\�����߂ɗp����D

float^̓\

�w����-127 ���w���̒l�ƂȂ�D�������͉����̏����_�ȉ���\���Ă���D���Ȃ킿�C�����͉������̐擪�� 1. ��t���������̂ɂȂ�D

float �̕\���l�@���@(-1)������ �~ 2�w����-127 �~ 1.������

float �^�̐��x�i�L�������j�͂Q�i���ɂ��� 24 (=23+1) ���ł���C�P�O�i���ł͖� 7 ���ƂȂ�D

�w�������L���ł��邽�߁C float �ŕ\�����Ƃ̂ł�������̐�Βl�͎��̂悤�Ȕ͈͂Ɍ�����D

1.175494 10-38 < float �̐�Βl < 3.402823 10+38

���̉����l�Ə���l�Ƃ́C�w�b�_�t�@�C�� float.h �� FLT_MIN ����� FLT_MAX �Ƃ������O�Ń}�N����`����Ă���D

#include <stdio.h>
#include <float.h>

int main()
{
  printf("FLT_MIN = %e,  FLT_MAX =%e\n", FLT_MIN, FLT_MAX);

  return 0;
}
FLT_MIN = 1.175494e-38,  FLT_MAX = 3.402823e+38

double �^

float �^�ɔ�ׂāC��{�̐��x�����������������_�^�̌^�� double �ł���D double �^�� �W�o�C�g��64�r�b�g�̃T�C�Y�ł���C���̓����\���͎��̂悤�ɂȂ�D

double^̓\

�w����-1023 ���w���̒l�ƂȂ�D�������͉����̏����_�ȉ���\���Ă���D���Ȃ킿�C�����͉������̐擪�� 1. ��t���������̂ɂȂ�D

double �̕\���l�@���@(-1)������ �~ 2�w����-1023 �~ 1.������

double �^�̐��x�i�L�������j�͂Q�i���ɂ��� 53 (=52+1) ���ł���C�P�O�i���ł͖� 15 ���ƂȂ�D

�w�������L���ł��邽�߁C double �ŕ\�����Ƃ̂ł�������̐�Βl�͎��̂悤�Ȕ͈͂Ɍ�����D

2.225074 10-308 < double �̐�Βl < 1.797693 10+308

���̉����l�Ə���l�Ƃ́C�w�b�_�t�@�C�� float.h �� DBL_MIN ����� DBL_MAX �Ƃ������O�Ń}�N����`����Ă���D

#include <stdio.h>
#include <float.h>

int main()
{
  printf("DBL_MIN = %e,  DBL_MAX =%e\n", DBL_MIN, DBL_MAX);

  return 0;
}
DBL_MIN = 2.225074e-308,  DBL_MAX = 1.797693e+308

���݂̃R���s���[�^�ł́C float �^���� double �^���g�����Ƃ������D���̗��R��
�@�P�D�@���x���ǂ��D
�@�Q�D�@�v�Z���x�������D
�Ƃ������Ƃ�����D���x���������R�́C���݂̂قƂ�ǂ̃R���s���[�^�ɂ� double �^�̃f�[�^����Ɉ�����H���t���Ă��邩��ł���D float �^�̌v�Z���s���Ƃ��ɂ́C��x double �^�ɕϊ�������C���̉�H�Ōv�Z���C ���̌�Ă� float �^�ɕϊ������D���������āC float �^�̕����v�Z���Ԃ����������邱�ƂɂȂ�D float �^�ɂ̓������T�C�Y�� double �^�̔����Ƃ������_�����邪�C ���݂̃R���s���[�^�͏\���ȃ������������Ă���̂ŁC���̗��_���L���ł��邱�Ƃ͂��܂�Ȃ��D

�y�[�W�擪�ɖ߂�

�^�ϊ�

���l��\���^�ɂ́C char, int, flat, double �Ȃǐ���ނ̌^�����邪�C �����̒l���݂��ɑ��̌^�ɕϊ����邱�Ƃ��^�ϊ��Ƃ����D

�������Z�ɂ��Öق̌^�ϊ�

�����^���m�̎l�����Z�̌��ʂ́C���̓����^�ł���D���Ƃ��΁C float �^ + float �^�̌��ʂ� float �^�ł���C int�^ / int�^ �̌��ʂ� int �^�ł���D

�����I�@�����^���m�̊���Z 1/3 �̌��ʂ͐����^������C
0.333333 �ł͂Ȃ��āC 0 �ł���D
����ɂ‚��ẮC��ł�����x�q�ׂ�D

�������C�قȂ�^�̎l�����Z�i������������Z�Ƃ����j�́C ���x�̒Ⴂ�����������֎����I�Ɍ^�ϊ����ꂽ�̂��ɉ��Z�����D
�����ŁC���x���Ⴂ�����͎��̖񑩂ɏ]���D�i�s�����̈Ӗ��� ���x���Ⴂ < ���x�������j

char < int < long int < float < double < long double

�Ⴆ�΁C int�^ + double�^ �� int�^�� double �^�Ɍ^�ϊ������̂��ɉ��Z�����D �i���̌��ʂ� double �^�ƂȂ�j

    char a, b;
    int i, j;
    float s, t;
    doubler x, y;
    
        i + j;           /* int�^ */
        s * t;           /* float�^ */
        
        i * x;           /* double�^ */
        a * s + t / x;   /* a * f ��float�^�C t / x ��double�^�C a * s + t / x ��double�^ */
        i / j * s / x;   /* i / j ��int�^�C i / j * s ��float�^�C i / j * s / x ��double�^ */ 

�ȏ�̂悤�ɁC���l�̎l�����Z�ɂ‚��Ă͌^���������Ă��Ă��C�K���ɂ��܂��v�Z�ł���悤�ɂȂ��Ă���D�������C�ԈႢ�₷���̂Œ��ӂ��ׂ����Ƃ���‚���D����� int�^ / int�^ �̌��ʂ� int�^ �ł���Ƃ������Ƃ��D ���ۂ̒l�́C����Z�̏��i���Z�̐��������j�ƂȂ�D ���������āC 1/3 �̌��ʂ͕��������_���� 0.333333 �ł͂Ȃ��āC ������ 0 �ł���D

����C�֐����������n���ɂ��Öق̌^�ϊ�

�l��ϐ��ɑ�����悤�Ƃ����Ƃ��C �l�̌^�ƕϐ��̌^�Ƃ��قȂ�Ƃ��ɂ́C �����̕ϐ��̌^�Ɏ����I�ɕϊ������D

�����^�̒l�𕂓������_�^�̕ϐ��ɑ������ƁC�����_�ȉ��� .000000 �ƂȂ�D

���������_�^�̒l�𐮐��^�̕ϐ��ɑ������ƁC�����_�ȉ����؂�̂Ă���D

main()
{
  int i;
  double x;

  i = 12;
  x = i;              /* int�^��double�^�ɕϊ� */
  printf("%f\n", x);

  x = 12.345;
  i = x;              /* double�^��int�^�ɕϊ� */
  printf("%d\n", i);

  x = -12.345;
  i = x;              /* double�^��int�^�ɕϊ� */
  printf("%d\n", i);
}
12.000000
12
-12

�֐��̈����֒l��n���Ƃ��ɁC �l�̌^�Ɗ֐��錾�̍ۂɒ�`���ꂽ�����̌^�Ƃ��قȂ�Ƃ��ɂ́C �����̌^�Ɏ����I�ɕϊ������D

void f(double x)
{
    printf("%f\n", x);
}

void g(int x)
{
    printf("%d\n", x);
}


main()
{
    int i = 10;
    double z = 12.345;
    
    f(i);  /* int �^�̎������� double �^�ɕϊ����ꂽ��C�������ɓn����� */
    g(z);  /* double �^�̎������� int �^�ɕϊ����ꂽ��C�������ɓn����� */
}
10.000000
12

�L���X�g�ɂ��^�ϊ�

��L�̂悤�ȈÖق̌^�ϊ��̑��ɁC�L���X�g��p���Ė����I�Ɍ^�ϊ����s�����Ƃ��ł���D

�L���X�g�Ƃ� (double) �̂悤�Ɍ^�������ʂł����������̂ł���C (double)a �̂悤�ɁC�^�ϊ����s�������ϐ��⎮��l�̑O�ɕt����D

    char a, b;
    int i, j;
    float s, t;
    doubler x, y;
    
        (double) a ;           /* double�^ */
        (float) (i + j);       /* float�^ */
        (char) x;              /* char�^ */
        (int) (i * x);         /* int�^ */

��قǒ��ӂ����ʂ�C int�^ / int�^�̌��ʂ� int�^�ł���C���̒l�͏��Z�̐��������ƂȂ�D ���ʂ̏��Z�i�����_�ȉ����܂߂��l�j�̒l���~�����Ƃ��ɂ́C���������_�^�ɖ����I�Ɍ^�ϊ����� �K�v������D

main()
{
  int i, j;
  double x;

  i = 1;
  j = 3;

  x = i / j;                  /* i / j �̌��ʂ͐����^�ł���D */
  printf("%f\n", x);          /* ���̌��ʂ� 0.000000 */

  x = (double)i / (double)j;  /* i �� j ��double�^�ɖ����I�Ɍ^�ϊ����Ă��� */
  printf("%f\n", x);          /* ����Ŋ��Ғʂ�̌��� 0.333333 �ƂȂ�D */

  x = (double) (i / j);       /* ����� i / j �̌��� 0 ��double�^�ɕϊ����邾���ł��� */
  printf("%f\n", x);          /* ���ʂ� 0.000000 �ƂȂ�D����ł͊��҂͂���D */
}

(double)i + (double)j �̓�‚̃L���X�g�̂����C��������ł����l�̌��ʂ�������D �i�������Z�ɂ��Öق̌^�ϊ����Ȃ���邽�߁j

0.000000
0.333333
0.000000

���������_�l�̏����_�ȉ���؂�̂ĂĐ����������������o�������Ƃ��ɂ́C (int) �ŃL���X�g����Ƃ悢�D

main()
{
    double x = 3.99, y = 2.99;
    
    int i;
    
    i = (int)x + (int)y;   /* x �̐��������� y �̐��������Ƃ������� */
    
    printf("%d\n", i);
}
5

���K���

���̃v���O������ 2/3 + 3/5 + 5/2 = 3.766667 ���v�Z���邽�߂̂��̂ł��邪�C ���ۂ̌��ʂ� 2.000000 �ƂȂ��Ă��܂��D�L���X�g��p���Č^�ϊ������邱�Ƃɂ��C ���m�ȓ������o��悤�ɂ���D

main()
{
  int i = 2, j = 3, k = 5;
  double x;

  x = i / j + j / k + k / i;    /* ���̎��̉E�Ӓ��ɁC�L���X�g�������‚������ */

  printf("%f\n", x);
}
�‚�����

�����Ő����������Ƃ̂����‚��͐��m�ł͂Ȃ��D���ׂȂ��Ƃł��邪�C�����������Ă����D

char �^�͏�� int �^�ɕϊ�����Ă��牉�Z�����D�]���� char�^�{char�^ �Ƃ������Z���ʂ́C int�^�ł���D���̏؋��� sizeof ���g���Č��Ă݂悤�D char�^�Ȃ�1�o�C�g�C int�^�Ȃ�4�o�C�g�ł���D

main()
{
    char a, b;
    
    printf("%d\n", sizeof(a+b));   /* a+b �Ƃ������Z���ʂ̃������T�C�Y��\�� */
}
4

int �^���� float �^�̕������x�������Ƃ����̂͂���Ӗ��ʼnR�ł���D int�^�́i�������������Ɍ���Ɓj10���قǂ̐��x�����邪�C float�^��7���قǂ����Ȃ��D

main()
{
  int i = 123456789;
  float f;

  f = i;
  printf("%d    %f\n", i, f);
}
123456789    123456792.000000

�y�[�W�擪�ɖ߂�

���������_���̌덷�i�ۂߌ덷�j

�����𕂓������_�����Ȃ킿�L��������2�i���ɂ���Čv�Z����ƁC�ǂ����Ă��덷��������D ������ۂߌ덷�Ƃ����D

���Ƃ��΁Cfloat �^�ŕ\���������́C���̗L�������͖� 7 ���ł���C ����ȏ�̐��x�����߂邱�Ƃ͂ł��Ȃ��D

����ɁC float �^�ŕ\������������ɗL������ 6 ���������Ă��邩�Ƃ����ƁC�����Ƃ͌���Ȃ��D �n�߂ɂ� 6 ���̗L�������������Ă������l���C�v�Z���J��Ԃ����Ƃɂ�萸�x���򉻂��邱�Ƃ�����D ���̏ꍇ�����Ă݂悤�D

������

�l���߂���‚̐��������Z���邱�Ƃɂ��C���̗L��������������D������������Ƃ����D �Ⴆ�Ύ��̌v�Z�ł́C 6 ���̗L���������������Q���̈����Z�̌��ʂ̗L�������� 2 ���ƂȂ��Ă���D

123.456 - 123.444 = 0.012

���������������Ƃ��āC�Q�������� a x2 + b x + c == 0 �� |ac| << |b|2 ������́i << �͔�r���Ă��Ȃ荷������Ƃ����Ӗ��j�̉����C ���̌��� �� = (- b + ��d )/(2a) , �� = (- b - ��d)/(2a) �ŋ��߂�v�Z�����Ă݂悤 �i������ d = b2-4ac �ł���j�D

��̓I�ȗ�Ƃ��� x2 - 333.33 x + 1.23456 == 0 �̉������߂Ă݂�i�^�̉��� 333.329296�c �� 0.00370372485�c �ł���j�D

#include <stdio.h>
#include <math.h>

int main()
{
  float a, b, c, sd, alpha, beta, z;

  a =  1.00000;
  b = -333.333;
  c =  1.23456;

  sd = sqrt( b*b - 4*a*c );

  alpha = (-b + sd) / (2*a);
  beta = (-b - sd) / (2*a);

  printf("alpha = %15e    beta = %15e\n", alpha, beta);
  printf("        %15e           %15e\n", 333.329296, 0.00370372485);
  printf("( sd= %f )\n", sd);
  return 0;
}

���w�֐� sqrt ���g���Ă���̂ŁC�R���p�C�����ɂ͐��w�֐����C�u�����������N����I�v�V���� -lm ��t����K�v������D

gcc filename.c -lm

���̌��ʂ͎��̂悤�ɂȂ�D��i�����̌����ŋ��߂����D���̉����^�̉��ł���D

alpha =    3.333293e+02    beta =    3.707886e-03
           3.333293e+02              3.703725e-03
( sd= 333.325592 )

alpha �͂قڐ������l�ƂȂ��Ă��邪�Cbeta �͂��Ȃ�̌덷������C�L�������͂R���قǂł���D

���̌����́Cbeta �����߂�Ƃ��� -b - sd �Ƃ����v�Z�ɂ���D-b = 333.333 �� sd = 333.325 �Ƃ̍��� 0.008 �ƂȂ�C���������������Ă���D

��������������邽�߂ɂ́C�v�Z�菇���l�������āC �傫���̋߂��Q���̈����Z�������悤�ɂ��邵���Ȃ��D ��̖��̏ꍇ�ɂ́Calpha * beta = c / a �Ƃ������ƌW���̊֌W��p���āC beta = c / (a * alpha) �Ƃ��������� beta ���v�Z����ƁC���������N���������Z������ł���D

#include <stdio.h>
#include <math.h>

int main()
{
  float a, b, c, sd, alpha, beta, z;

  a =  1.00000;
  b = -333.333;
  c =  1.23456;

  sd = sqrt( b*b - 4*a*c );

  alpha = (-b + sd) / (2*a);
  beta = c/(a*x);

  printf("alpha = %15e    beta = %15e\n", alpha, beta);
  printf("        %15e           %15e\n", 333.329296, 0.00370372485);
  printf("( sd= %f )\n", sd);
  return 0;
}
alpha =    3.333293e+02    beta =    3.703725e-03
           3.333293e+02              3.703725e-03

��񗎂�

��Βl���傫�Ȓl�Ə����Ȓl�Ƃ��������ꍇ�C���������̐��l������񂪎�����D ���Ƃ��΁C float �^�̐��x�͖�U���ł��邩��Cfloat �^�̐��l 77777.7 �� 1.23456 �Ƃ�������ƁC ���ʂ��U���ł��邩��C 77778.9 �ƂȂ�D���Ȃ킿�C 1.23456 �������̂����̉��S���̏�񂪎����Ă���D

77777.7 + 1.23456 = 77778.9

�����̃f�[�^�𑫂����킹��Ƃ��ɂ́C���̏�񗎂����ݐς��Ė����ł��Ȃ��Ȃ�D

���̃v���O�����́C f(x) = ��(1-x^2) ����� [0, 1] �Őϕ������l�� �S�{���~�����΂ł��邱�Ƃ�p���āC ��� [0, 1] �� 1000000 ���������_�ł� f(x) �̒l�������� 1000000 �Ŋ��� 4 �{���邱�Ƃ� �~���� 3.14159265... �����߂���̂ł���D

#include <stdio.h>

#define N 1000000
#define sqr(x) ((x)*(x))

int main()
{
  float f[N];
  int i;
  float s;

  for (i = 0; i < N; i++) {
    f[i] = sqrt( 1 - sqr((i+0.5) / N));
  }

  s = 0.0;
  for (i = 0; i < N; i++) {
    s += f[i];
  }
  printf("%f\n", 4.0 * s / N);

  return 0;
}

���w�֐� sqrt ��p���Ă���̂ŁC�R���p�C�����Ƀ����N�I�v�V���� -lm ��t����K�v������D

gcc filename.c -lm

�������C���s���ʂ͎��̒ʂ�ŁC���̗L��������4���قǂ����Ȃ��D ����́C���[�v�̌㔼�ɂ����āC�l���J��Ԃ������Ē~�ς��� s �̒l�� f[i] �̒l�Ɣ�r���Ĕ��ɑ傫���Ȃ������߁C s += f[i] �̉��Z�ɂ����ď�񗎂����������C���ꂪ�ݐς������߂ł���D �i��񗎂��Ƃ������t�ɘf�킳��āC�{���̒l�����������Ȃ��Ă��܂��Ǝv�����������C���̏ꍇ�̂悤�ɁC�����Ƃ͌���Ȃ��D�j

3.141616

���̂悤�ȏ�񗎂����C�v�Z�菇�̍H�v�ɂ�������邱�Ƃ��ł���D

���̃v���O�����ł́C������ׂ��l�Ǝ��ۂɉ�������l�Ƃ̍��i�ςݎc���j�� �l�����邱�Ƃŏ�񗎂���h���ł���D

#include <stdio.h>

#define N 1000000
#define sqr(x) ((x)*(x))

int main()
{
  float f[N];
  int i;
  float r, s, t;

  for (i = 0; i < N; i++) {
    f[i] = sqrt( 1 - sqr((i+0.5) / N));
  }

  r = s = 0;                  /* r �͐ςݎc���C s �͑��a */
  for (i = 0; i < N; i++) {
    t = s + (f[i] + r);       /* �O��܂ł̑��a�� f[i] �ƑO��܂ł̐ςݎc���Ƃ����������̂��C����̌��� */
    r = (f[i] + r) - (t - s); /* ������ׂ��l (f[i] + r) �Ǝ��ۂɉ�������l (t - s) �Ƃ̍����C����̐ςݎc�� */
    s = t;
  }
  printf("%f\n", 4.0 * s / N);


  return 0;
}
3.141593

���K���

100001.0, 0.123456, 0.111111, -100000.0 �Ƃ����S�‚̐��l�̘a�� 1.234567 �ł��邪�C ���̃v���O�����Ōv�Z����ƁC�Ⴄ�l�ƂȂ�D

#include <stdio.h>

main()
{
  float a, b, c, d, s;

  a =  100001.0;
  b =  0.123456;
  c =  0.111111;
  d = -100000.0;

  s = 0.0;
  s += a;
  s += b;
  s += c;
  s += d;

  printf("%f\n", s);
}
1.234375

�l���Ⴄ���R�́C��񗎂����N�����Ă��邹���ł���D�l�������鏇����ύX���āC��萳�m�Ȓl���o��悤�Ƀv���O������ύX����D

�y�[�W�擪�ɖ߂�

�Z�p�֐����C�u����

�R���p�C������ -lm �I�v�V������t���邱�ƂŁC�W���b���C�u�����ɂ��邢���‚��̎Z�p�֐����g�����Ƃ��ł���D

�g�p�ɐ旧���ăv���O�������Ɏ��̃C���N���[�h���߂������K�v������D

#include <math.h>

�Z�p�֐����g�p�����Ƃ��ɂ́C�R���p�C������ -lm �I�v�V������t����D

gcc filename.c -lm

���ɋ�����֐��͂悭�g���֐��ł��邪�C���Ƃł͉�����Ȃ��D �ǂ̂悤�Ȋ֐������������������Ă��������ŗǂ��D

�ߐڐ���

double ceil(double x)                x �ȏ�̍ŏ��̐���

double floor(double x)               x �ȉ��̍ő�̐���

��Βl

double fabs(double x)                x �̐�Βl

��]

double fmod(double x, double y)      x �� y �Ŋ������]��

�ׂ���

double pow(double x, double y)       xy

double sqrt(double x)                ��x

�w���ΐ�

double exp(double x)                 ex

double log(double x)                 log x

�O�p�֐�

double sin(double x)                 sin x  (x �̒P�ʂ̓��W�A��)

double cos(double x)                 cos x  (x �̒P�ʂ̓��W�A��)

double tan(double x)                 tan x  (x �̒P�ʂ̓��W�A��)

�t�O�p�֐�

double asin(double x)                 arcsin x

double acos(double x)                 arccos x

double atan(double x)                 arctan x

double atan2(double x, double y)      arctan y/x

���̑��ɂ����邪�ȗ�����D

�y�[�W�擪�ɖ߂�