�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�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�^��4�o�C�g��32�r�b�g�̃T�C�Y�������C���̃r�b�g�����̂悤�ɁC�����C�w���C������\�����߂ɗp����D
�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
float �^�ɔ�ׂāC��{�̐��x�����������������_�^�̌^�� double �ł���D double �^�� �W�o�C�g��64�r�b�g�̃T�C�Y�ł���C���̓����\���͎��̂悤�ɂȂ�D
�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
���l��\���^�ɂ́C char, int, flat, double �Ȃǐ���ނ̌^�����邪�C �����̒l���݂��ɑ��̌^�ɕϊ����邱�Ƃ��^�ϊ��Ƃ����D
�����^���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
�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�̂悤�ȈÖق̌^�ϊ��̑��Ɂ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
���̃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
�����������_�����Ȃ킿�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
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
�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 �ȉ��̍ő�̐���
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
double exp(double x) ex double log(double x) log x
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��)
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