- 1 1. ã¯ããã«ïœãªããåãæšãŠããéèŠãªã®ãïŒ
- 2 2. æŽæ°ã«å¯ŸããåãæšãŠã®æåãšæ³šæç¹
- 3 3. æµ®åå°æ°ç¹ã®åãæšãŠïœfloor颿°ã®äœ¿ãæ¹ãšç¹åŸŽ
- 4 4. ãã£ã¹ãã«ããåãæšãŠã®ä»çµã¿ãšéã
- 5 5. fenv.hã䜿ã£ãäžžãã¢ãŒãã®å€æŽïŒå¿çšïŒ
- 6 6. ãå®çšäŸãéé¡åŠçã»é ååŠçã§ã®åãæšãŠãã¯ããã¯
- 7 7. ããããããã¹ãåå¿è
ãã€ãŸãããã€ã³ããšå¯ŸåŠæ³
- 7.1 æŽæ°ã®å²ãç®ã§å°æ°ã欲ããã®ã« int ã®ãŸãŸåŠçããŠããŸã
- 7.2 è² ã®æ°ã®åãæšãŠã§æå³ãšç°ãªãçµæã«ãªã
- 7.3 math.h ãã€ã³ã¯ã«ãŒããå¿ããŠãã«ããšã©ãŒã«ãªã
- 7.4 åãæšãŠã®é åºãã¹ã§æå³ããªãçµæã«ãªã
- 7.5 æµ®åå°æ°ç¹ã®èª€å·®ã«æ³šæ
- 8 8. FAQïœCèšèªã®åãæšãŠã«é¢ãããããã質å
- 8.1 Q1ïŒfloat ã double ã int ã«ãã£ã¹ããããšã©ããªããŸããïŒ
- 8.2 Q2ïŒfloor() 颿°ã¯è² ã®æ°ã«ã䜿ããŸããïŒ
- 8.3 Q3ïŒæŽæ°ãå²ãç®ãããå°æ°ç¹ä»¥äžãæ¶ããŸããããªãã§ããïŒ
- 8.4 Q4ïŒæµ®åå°æ°ç¹ã®å²ãç®ã§ãåãæšãŠãã«ã¯ã©ãããã°ããã§ããïŒ
- 8.5 Q5ïŒäžžãã¢ãŒãã£ãŠäœïŒãã€äœ¿ãã®ïŒ
- 8.6 Q6ïŒround() 颿°ãš floor() ã®éãã¯ïŒ
- 8.7 Q7ïŒåãæšãŠåŠçã®é çªã£ãŠéèŠãªãã§ããïŒ
- 9 9. ãŸãšãïœç®çã«å¿ããåãæšãŠæ¹æ³ã䜿ãåããã
1. ã¯ããã«ïœãªããåãæšãŠããéèŠãªã®ãïŒ
ããã°ã©ãã³ã°ã«ãããŠãæ°å€ã®ãåãæšãŠãåŠçã¯éåžžã«éèŠãªåœ¹å²ãæ ã£ãŠããŸããç¹ã«Cèšèªã®ãããªäœã¬ãã«ã«è¿ãèšèªã§ã¯ãããŒã¿ã®ç²ŸåºŠãåã®æ±ãã«çްå¿ã®æ³šæãæãå¿ èŠããããŸãã
åãæšãŠã¯ãæå³çãªèª€å·®èª¿æŽã
åãæšãŠãšã¯ãæ°å€ã®å°æ°ç¹ä»¥äžãäœããé€å€ããããåçŽãªåœ¢ã«å€æããåŠçã§ããããã¯ãäžžãåŠçã®äžçš®ã§ãããèšç®çµæãæå³çã«å¶éããããšã§ãããã°ã©ã ã®åäœãå®å®ãããããããã©ãŒãã³ã¹ãæé©åããããã广ããããŸãã
ããšãã°ãæ¯æãéé¡ã®èšç®ã§ã1åæªæºãåãæšãŠããåŠçããé åã®ã€ã³ããã¯ã¹ãæŽæ°ã§æ±ãéãªã©ãæ¥åžžçã«äœ¿çšãããã·ãŒã³ã¯å€å²ã«ããããŸãã
Cèšèªã§ã¯ãèªåã§åãæšãŠããããå Žé¢ããã
Cèšèªã§ã¯ãéçºè
ãæå³ããªããŠãèªåçã«åãæšãŠãè¡ãããããšããããŸããããšãã°ãint
åã®å€æ°å士ãé€ç®ãããšãçµæãæŽæ°ãšããŠåŠçããããããå°æ°ç¹ä»¥äžã¯ç¡èŠãããŠããŸããŸãã
int a = 5 / 2; // çµæã¯ 2ãå°æ°ç¹ä»¥äžã¯åãæšãŠããã
ãã®ãããªæåãæ£ããçè§£ããŠããªããšãèšç®ãã¹ãæå³ããªããã°ã®åå ãšãªããŸãã
誀解ããããããåãæšãŠãã®åŠçæ¹æ³
ãæ°å€ã®åãæšãŠããšäžèšã§èšã£ãŠããããŸããŸãªæ¹æ³ãšã«ãŒã«ããããŸãã
- æŽæ°åå£«ã®æŒç®ã«ããåãæšãŠïŒæé»çïŒ
- æµ®åå°æ°ç¹æ°ã
int
åã«ãã£ã¹ãããæç€ºçãªåãæšãŠ math.h
ã®floor()
颿°ã䜿ã£ãåãæšãŠ- äžžãã¢ãŒãã倿Žããé«åºŠãªæ¹æ³
ããããåäœã®ã«ãŒã«ãåŸãããçµæãç°ãªããããçšéã«å¿ãã䜿ãåããæ±ããããŸãã
2. æŽæ°ã«å¯ŸããåãæšãŠã®æåãšæ³šæç¹
Cèšèªã«ãããæŽæ°åå£«ã®æŒç®ã¯ãä»ã®é«çŽèšèªãšã¯ç°ãªãç¹åŸŽãæã£ãŠããŸããç¹ã«ãæŽæ°ã®å²ãç®ã«ãããåãæšãŠã®æåãã¯ãåå¿è ãã€ãŸããããããã€ã³ãã®äžã€ã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ãå ·äœçãªã³ãŒãäŸãšãšãã«ãæŽæ°æŒç®ã«ãããåãæšãŠåŠçã®ã«ãŒã«ã解説ããŸãã
æŽæ°ã®å²ãç®ã¯ãå°æ°ç¹ä»¥äžãèªåã§åãæšãŠãã
Cèšèªã§ã¯ãint
åãªã©ã®æŽæ°åå士ã§å²ãç®ãè¡ããšãçµæãæŽæ°åã«ãªããå°æ°ç¹ä»¥äžã¯èªåçã«åãæšãŠãããŸãããã®åŠçã¯ãæé»çãªåãæšãŠããšãåŒã°ããç¹å¥ãªèšè¿°ãããªããŠãåžžã«è¡ãããŸãã
#include <stdio.h>
int main() {
int a = 5;
int b = 2;
int result = a / b;
printf("%d
", result); // åºåïŒ2
return 0;
}
ãã®å Žåãæ¬æ¥ã®èšç®çµæã¯ 2.5
ã§ãããæŽæ°åã§ãããã å°æ°ç¹ä»¥äžã¯åãæšãŠããã2
ãåºåãããŸãã
ãã®ãããªä»æ§ã«æ°ã¥ããã«2.5
ãæåŸ
ããŠãããšãæå³ããªãåäœã«ãªãããæ³šæãå¿
èŠã§ãã
è² ã®æ°ã«å¯Ÿããå²ãç®ã®æåã«ã泚æãå¿ èŠ
ããã²ãšã€æ³šæãã¹ãç¹ã¯ããè² ã®æ°ãã«å¯Ÿããå²ãç®ã§ããCèšèªã§ã¯ãC99以éã®æšæºã«ãããŠããŒãæ¹åãžã®äžžãïŒtoward zeroïŒãã仿§ãšããŠæç¢ºã«å®çŸ©ãããŠããŸãã
#include <stdio.h>
int main() {
int a = -5;
int b = 2;
int result = a / b;
printf("%d
", result); // åºåïŒ-2
return 0;
}
ãã®ã³ãŒãã§ã¯ -5 ÷ 2
ã®çµæã¯ -2.5
ã§ãããåãæšãŠã®çµæã¯ -2
ãšãªããŸãããã€ãã¹æ¹åã«åãäžããïŒ-3ïŒã§ã¯ãªãããŒãæ¹åã«äžžããïŒ-2ïŒãšããæåã«æ³šæããŠãã ããã
ã³ã³ãã€ã©ãCã®ããŒãžã§ã³ã«ããéãã¯ïŒ
C99以åã®ç°å¢ãäžéšã®å€ãã³ã³ãã€ã©ã§ã¯ãè² ã®æ°ã®å²ãç®ã«å¯Ÿããæåãå®è£ äŸåã ã£ãããšããããŸããããããçŸåšã§ã¯ã»ãšãã©ã®ç°å¢ãC99æºæ ãšãªã£ãŠãããããŒãæ¹åãžã®äžžãããæšæºåãããŠããŸãããšã¯ãããè€æ°ã®ãã©ãããã©ãŒã ã§åäœããã³ãŒããæžãå Žåã¯ãäžžãæ¹åã®éãã«æ³šæãæãããšãæšå¥šãããŸãã
æå³çã«å°æ°ãåŸããå Žåã®å¯ŸåŠæ³
æŽæ°å士ã®å²ãç®ã§å°æ°ç¹ä»¥äžãå¿ èŠãªå Žåã¯ãæç€ºçã«å倿ãè¡ããŸãããã
double result = (double)a / b; // 5 â 5.0ãçµæïŒ2.5
ãã®ããã«çæ¹ãdouble
ã«ãã£ã¹ãããããšã§ãå°æ°ç¹ä»¥äžãŸã§æ£ããèšç®ã§ããŸãã
3. æµ®åå°æ°ç¹ã®åãæšãŠïœfloor颿°ã®äœ¿ãæ¹ãšç¹åŸŽ
Cèšèªã§å°æ°ç¹ä»¥äžãåãæšãŠããå Žåãæµ®åå°æ°ç¹æ°ïŒfloat
ã double
ïŒã«å¯ŸããŠäœ¿ãã代衚çãªæ¹æ³ã floor()
颿°ã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ãfloor()
ã®åºæ¬çãªäœ¿ãæ¹ãæåãä»ã®é¡äŒŒé¢æ°ãšã®éãã«ã€ããŠè©³ãã解説ããŸãã
floor颿°ãšã¯ïŒåºæ¬ã®äœ¿ãæ¹
floor()
颿°ã¯ãæå®ããæ°å€ã®å°æ°ç¹ä»¥äžãåãæšãŠãŠãæãè¿ããå°ãããæŽæ°ãè¿ã颿°ã§ããããã¯ããã€ãã¹æ¹åãžã®äžžãããšã衚çŸãããŸãã
å©çšã«ã¯ math.h
ã®ã€ã³ã¯ã«ãŒããå¿
èŠ
#include <stdio.h>
#include <math.h>
int main() {
double val = 3.7;
double result = floor(val);
printf("%.1f
", result); // åºåïŒ3.0
return 0;
}
ãã®äŸã§ã¯ã3.7 ã¯å°æ°ç¹ä»¥äžãåãæšãŠãŠ 3.0 ãè¿ãããŸãã
è² ã®æ°ã«å¯Ÿããæåã«æ³šæ
floor()
颿°ã®æå€§ã®ç¹åŸŽã¯ããåžžã«å°ããæ¹åïŒè² æ¹åïŒã«äžžãããç¹ã«ãããŸããããã¯ããŒãæ¹åã«åãæšãŠããã£ã¹ãïŒ(int)
ïŒãšã¯æç¢ºã«ç°ãªããŸãã
#include <stdio.h>
#include <math.h>
int main() {
double val = -3.7;
double result = floor(val);
printf("%.1f
", result); // åºåïŒ-4.0
return 0;
}
ãã®å Žåã-3.7
㯠-4.0
ã«åãæšãŠãããŸãããŒãæ¹åã§ã¯ãªããfloor ã¯ããå°ããæŽæ°ã«äžžããã®ã§ãã
ceilãroundãšã®éã
Cèšèªã«ã¯ floor()
以å€ã«ããæ°å€ãäžžããã颿°ããããŸããããããã®éããæ¯èŒããŠã¿ãŸãããã
颿°å | åäœ | äŸïŒ-3.7ïŒ |
---|---|---|
floor() | å°ããæŽæ°ãžåãæšãŠïŒè² æ¹åïŒ | -4.0 |
ceil() | 倧ããæŽæ°ãžåãäžãïŒæ£æ¹åïŒ | -3.0 |
round() | æãè¿ãæŽæ°ãžåæšäºå ¥ | -4.0 |
ããããçšéãç°ãªãããããã©ã®ããã«äžžãããããã«ãã£ãŠé¢æ°ã䜿ãåããããšãéèŠã§ãã
floor颿°ã¯ãã€äœ¿ãã¹ããïŒ
floor()
ã¯ãããšãã°å²åŒåŸã®äŸ¡æ ŒãåãäžããŠè¡šç€ºããå Žåããã«ãŒãã®çµç«¯ãæŽæ°ã§ç®¡çãããå Žé¢ãªã©ã粟床ãããå¶åŸ¡ã®æç¢ºããåªå
ãããåŠçã«åããŠããŸãã
double price = 1234.56;
double discounted = floor(price * 100) / 100; // å²åŒåŸäŸ¡æ ŒãåãæšãŠ
ãã®ããã«ããŠãŒã¶ãŒã«å¯ŸããŠæå³çã«ãåŸããããªããèšç®ããããå Žé¢ã§å¹æãçºæ®ããŸãã
4. ãã£ã¹ãã«ããåãæšãŠã®ä»çµã¿ãšéã
Cèšèªã§ã¯ãå倿ïŒãã£ã¹ãïŒã«ãã£ãŠæµ®åå°æ°ç¹æ°ããæŽæ°åãžå€æããããšã§ãå°æ°ç¹ä»¥äžãåãæšãŠãããšãã§ããŸããããã¯éåžžã«ã·ã³ãã«ãªæ¹æ³ã§ãããfloor()
颿°ãšã¯ç°ãªãæåã瀺ããããäž¡è
ã®éããæ£ããçè§£ããããšãéèŠã§ãã
æµ®åå°æ°ç¹æ°ããæŽæ°åãžã®ãã£ã¹ãã«ããåãæšãŠ
ãã£ã¹ãã䜿ã£ãåãæšãŠã¯ã倿°ã®åãæç€ºçã«å€æŽããæ¹æ³ã§ããããšãã°ãdouble
åã®å€ã int
åã«å€æãããšãå°æ°ç¹ä»¥äžãèªåçã«åãæšãŠãããŸãã
#include <stdio.h>
int main() {
double val = 3.7;
int result = (int)val;
printf("%d
", result); // åºåïŒ3
return 0;
}
ãã®äŸã§ã¯ 3.7
ã®å°æ°ç¹ä»¥äžãåãæšãŠããã3
ãçµæãšããŠåŸãããŸãããã£ã¹ãã§ã¯ããŒãæ¹åããžã®äžžããè¡ããããããæ£ã®æ°ã§ãè² ã®æ°ã§ãã0ã«è¿ã¥ããæ¹åã«ãªããŸãã
è² ã®å€ã«å¯Ÿããæåã®éã
ãã£ã¹ããš floor()
颿°ã®æå€§ã®éãã¯ãè² ã®æ°ãæ±ã£ããšãã®çµæã§ãã
#include <stdio.h>
#include <math.h>
int main() {
double val = -3.7;
int cast_result = (int)val;
double floor_result = floor(val);
printf("ãã£ã¹ãïŒ%d
", cast_result); // åºåïŒ-3
printf("floorïŒ%.1f
", floor_result); // åºåïŒ-4.0
return 0;
}
ãã®ã³ãŒãããããããéãïŒ
- ãã£ã¹ãïŒ
-3.7
â-3
ïŒãŒãæ¹åïŒ - floorïŒ
-3.7
â-4.0
ïŒå°ããæ¹åïŒ
ãã®éããç¥ããã«ãã£ã¹ãã䜿ã£ãŠããŸããšãæ³å®å€ã®äžžã誀差ãçºçããããžãã¯ãçãå¯èœæ§ããããŸãã
ãã£ã¹ãã䜿ãå©ç¹ãšæ³šæç¹
å©ç¹ïŒ
- å®è£ ãç°¡åã§ãæšæºé¢æ°ã«äŸåããªãããåŠçãé«éã
math.h
ãã€ã³ã¯ã«ãŒãããå¿ èŠããªãã
泚æç¹ïŒ
- äžžãæ¹åãåžžã«ãŒãæ¹åã§ããç¹ã«æ³šæã
- ãã€ãã¹ã®å€ãæ±ãå Žåãæå³ãšç°ãªãçµæã«ãªãããšãããã
- ãã£ã¹ãåŠçã¯ãæç€ºçãªæå³ãããããšã瀺ããææ®µã§ããããããå¯èªæ§ãæ±ããããå Žé¢ã§ã¯é©åã«ã³ã¡ã³ããæ·»ããããšãæãŸããã
çšéã«å¿ãã䜿ãåããéèŠ
ãã©ã¡ãã䜿ãã¹ããïŒããšããåãã«å¯ŸããŠã¯ã次ã®ããã«å€æã§ããŸãã
åŠçã®ç®ç | 䜿çšããææ³ |
---|---|
è² ã®æ°ãå«ããŠåžžã«ãå°ããæ¹ãã«äžžããã | floor() 颿° |
ãŒãæ¹åãžã®åãæšãŠïŒããã©ãŒãã³ã¹éèŠïŒ | ãã£ã¹ã (int) |
æ°åŠçãªæå³ã§ã®ãæãè¿ãæŽæ°ã | round() 颿° |
ãã®ããã«ãç®çã«å¿ããé©åãªæ¹æ³ãéžã¶ããšã§ããã°ã®ãªãå ç¢ãªã³ãŒããæžããããã«ãªããŸãã

5. fenv.hã䜿ã£ãäžžãã¢ãŒãã®å€æŽïŒå¿çšïŒ
Cèšèªã«ãããŠãæµ®åå°æ°ç¹æŒç®ã®äžžãæ¹æ³ãããã°ã©ã å
ã§å¶åŸ¡ãããå Žåã«ã¯ãfenv.h
ãšããæšæºã©ã€ãã©ãªãå©çšã§ããŸãããã®ã©ã€ãã©ãªã䜿ãããšã§ãã°ããŒãã«ãªäžžãã¢ãŒãïŒRounding ModeïŒã倿Žããããšãå¯èœã«ãªããŸãã
ããã¯ãæ°å€èšç®ã®ç²ŸåºŠãåçŸæ§ãéèŠãªåéïŒç§åŠæè¡èšç®ãéèã·ã¹ãã ãªã©ïŒã§ç¹ã«æçšã§ãã
äžžãã¢ãŒããšã¯ïŒ
äžžãã¢ãŒããšã¯ãæµ®åå°æ°ç¹æŒç®ã®çµæãæŽæ°ã§è¡šããªãå Žåã«ãã©ã®ããã«è¿äŒŒããããæ±ºå®ããæ¹åŒã®ããšã§ããCèšèªã§ã¯ä»¥äžã®4çš®é¡ã®äžžãã¢ãŒãããµããŒããããŠããŸãã
宿°å | 説æ |
---|---|
FE_TONEAREST | æãè¿ãå€ã«äžžããïŒåæšäºå ¥ïŒ |
FE_DOWNWARD | å°ããæ¹åãžäžžããïŒfloorãšåæ§ïŒ |
FE_UPWARD | 倧ããæ¹åãžäžžããïŒceilãšåæ§ïŒ |
FE_TOWARDZERO | ãŒãæ¹åãžäžžããïŒãã£ã¹ããšåæ§ïŒ |
äžžãã¢ãŒããèšå®ããæ¹æ³
fenv.h
ãå©çšããããšã§ãçŸåšã®äžžãã¢ãŒããæç€ºçã«èšå®ã»ååŸã§ããŸãã
äžžãã¢ãŒãã®èšå®äŸïŒfesetround()
ïŒ
#include <stdio.h>
#include <math.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
int main() {
fesetround(FE_DOWNWARD); // äžžãã¢ãŒãããå°ããæ¹åãã«èšå®
double x = 3.7;
double result = rint(x); // rint颿°ã¯äžžãã¢ãŒãã«åŸã£ãŠäžžãã
printf("çµæïŒ%.1f
", result); // åºåïŒ3.0
return 0;
}
â» rint()
颿°ã¯ãçŸåšèšå®ãããŠããäžžãã¢ãŒãã«åŸã£ãŠæ°å€ãäžžãã颿°ã§ãã
äžžãã¢ãŒããååŸããæ¹æ³ïŒfegetround()
ïŒ
çŸåšã®äžžãã¢ãŒãã確èªãããå Žåã¯ã以äžã®ããã«èšè¿°ããŸãã
int mode = fegetround();
if (mode == FE_DOWNWARD) {
printf("çŸåšã®äžžãã¢ãŒã㯠FE_DOWNWARD ã§ãã
");
}
ããã«ãããã©ã®ãããªäžžãã«ãŒã«ãé©çšãããŠããããåçã«ææ¡ã§ããŸãã
泚æç¹ãšäœ¿çšäžã®å¶çŽ
#pragma STDC FENV_ACCESS ON
ã¯ãã³ã³ãã€ã©ã«ãäžžãã¢ãŒããæ£ããè§£éããããšäŒããæç€ºã§ããããæå®ããªããšfesetround()
ãæ£ããæ©èœããªãããšããããŸãã- äžéšã®å€ãã³ã³ãã€ã©ãç°å¢ã§ã¯
fenv.h
ã®ãµããŒããäžå®å šãªå ŽåããããŸãã - äžžãã¢ãŒãã¯ã¹ã¬ããéã§å ±æãããå Žåãããããããã«ãã¹ã¬ããç°å¢ã§ã¯æ³šæãå¿ èŠã§ãã
ã〠fenv.h
ã䜿ãã¹ããïŒ
fenv.h
ã¯ä»¥äžã®ãããªç¶æ³ã§æå¹ã§ãïŒ
- ç§åŠæè¡èšç®ãçµ±èšåŠçãªã©ãäžžã誀差ãçµæã«åœ±é¿ãåãŒãå Žé¢
- æµ®åå°æ°ç¹ã®äžžãæ¹æ³ãçµ±äžãããå Žå
- ãã¹ããæ€èšŒã®éã«äžžãæåãåºå®ãããå Žå
äžæ¹ãæ¥åžžçãªã¢ããªã±ãŒã·ã§ã³éçºã§ã¯ãéåžžã® floor()
ã cast
ã§ååãªããšãå€ããfenv.h
ã®äœ¿çšã¯éå®çã§ãã
6. ãå®çšäŸãéé¡åŠçã»é ååŠçã§ã®åãæšãŠãã¯ããã¯
ãããŸã§ã§Cèšèªã«ãããåãæšãŠåŠçã®åºæ¬ãåŠã³ãŸããããå®éã®éçºçŸå Žã§ã¯ã©ã®ããã«æŽ»çšãããŠããã®ã§ããããïŒ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãå®åçã«ãããã2ã€ã®ã·ãŒã³ããéé¡ã®èšç®ããšãé
åãã«ãŒãåŠçãã«ãããåãæšãŠã®äœ¿ãæ¹ã«ã€ããŠè§£èª¬ããŸãã
éé¡åŠçïŒç«¯æ°ãåãæšãŠãŠè«æ±é¡ãæ£ç¢ºã«ç®åº
ããšãã°ãçšèŸŒäŸ¡æ ŒããçšæäŸ¡æ Œãæ±ããããå²åŒåŸã®éé¡ã衚瀺ãããããå Žåã«ã1åæªæºã®ç«¯æ°ãåãæšãŠãããšããããŸãã
äŸïŒ1åæªæºãåãæšãŠãåŠçïŒfloorã䜿çšïŒ
#include <stdio.h>
#include <math.h>
int main() {
double price = 1234.56;
double discounted = price * 0.9; // 10%å²åŒ
double rounded = floor(discounted); // å°æ°ç¹ä»¥äžãåãæšãŠ
printf("å²åŒåïŒ%.2f
", price);
printf("å²åŒåŸïŒåãæšãŠïŒïŒ%.0f å
", rounded); // åºåïŒ1111 å
return 0;
}
ãã®ããã« floor()
ãçšããã°ã衚瀺çšã®éé¡ããŠãŒã¶ãŒã«ãšã£ãŠåãããããããã€æå³ããéé¡ã«èª¿æŽã§ããŸãã
é ååŠçïŒã€ã³ããã¯ã¹ã®ç®åºã«ãããåãæšãŠ
é
åã®åŠçãããŒã¿åå²ãè¡ãéã«ããæŽæ°ã«åãæšãŠãåŠçã¯æ¬ ãããŸããã
ããšãã°ãç·ããŒã¿æ°ã«å¯ŸããŠåçã«åå²ããããšãã«ãå°æ°ç¹ä»¥äžãåãæšãŠãŠã€ã³ããã¯ã¹ã«å€æããå¿
èŠããããŸãã
äŸïŒ10ä»¶ã®ããŒã¿ã3çåããããããã®ç¯å²ã決å®ãã
#include <stdio.h>
int main() {
int total = 10;
int parts = 3;
int chunk_size = total / parts; // æŽæ°é€ç®ã«ããåãæšãŠ
printf("1ã°ã«ãŒããããã®ä»¶æ°ïŒåãæšãŠïŒïŒ%d
", chunk_size); // åºåïŒ3
return 0;
}
ãã®å Žåã10 ÷ 3 = 3.333...
ã§ãããint
åå士ã®é€ç®ã®ãããèªåçã«åãæšãŠãããŠ3ãšãªããŸãã
å®è·µçãªå¿çšäŸïŒåº§æšãåæ°ã®æŽæ°å€æã«ãå¿çšã§ãã
- ã°ã©ãæç»ã®éã«ãäœãã¯ã»ã«ããšã«ç®çããé 眮ãããããèšç®ãã
- å ¥åããããå²åïŒïŒ ïŒããæŽæ°å€ã®éã¿ãšããŠæ±ã
- ç§åäœã®æéããåïŒç§ãã«å€æãããšããå°æ°ç¹ä»¥äžãåãæšãŠãп޿°ã«å€æ
ãã®ãããªå Žé¢ã§ããæèçãªåãæšãŠåŠçã¯éèŠãªåœ¹å²ãæãããŸãã
åãæšãŠåŠçã§æ°ãä»ãããç¹
- 誀ã£ãŠåãäžããåæšäºå ¥ã䜿ã£ãŠããªãã
- ãfloorããããã£ã¹ããã®äœ¿ãåããæç¢ºã«
- å°æ°ç¹ä»¥äžã®èšç®é åº
- å ã«æŒç®ããåŸã§åãæšãŠãã®ãåºæ¬ãé åºã誀ããšèšç®èª€å·®ãçãããã
- é貚åŠçã§ã¯æµ®åå°æ°ç¹ã®èª€å·®ã«ã泚æ
- å¿ èŠã«å¿ããŠæŽæ°ïŒäŸïŒå â éåäœã§intåïŒã«å€æããŠåŠçããããšããã
7. ããããããã¹ãåå¿è ãã€ãŸãããã€ã³ããšå¯ŸåŠæ³
Cèšèªã«ããããåãæšãŠåŠçãã¯ãäžèŠãããšã·ã³ãã«ãªæ©èœã«æãããããããŸããããåå¿è ãééããããèœãšã穎ãããã€ãååšããŸããããã§ã¯ãç¹ã«ã€ãŸããããããã¿ãŒã³ãšãã®å¯ŸåŠæ³ã玹ä»ããŸãã
æŽæ°ã®å²ãç®ã§å°æ°ã欲ããã®ã« int
ã®ãŸãŸåŠçããŠããŸã
æãå€ããã¹ã®äžã€ãããã§ããæŽæ°å士ãå²ãç®ããçµæãå°æ°ç¹ä»¥äžãåŸããããšæåŸ ããŠããã«ãé¢ããããçµæãæŽæ°ã«ãªã£ãŠããŸããŸãã
äŸïŒæåŸ å€ãã®åºå
int a = 5;
int b = 2;
double result = a / b; // â çµæã¯ 2.0ïŒå°æ°ç¹ä»¥äžãæ¶å€±ïŒ
a / b
ã®æç¹ã§æŽæ°æŒç®ãè¡ãããŠããŸããããå°æ°ç¹ä»¥äžã倱ãããŸãã
å¯ŸåŠæ³ïŒçæ¹ãæç€ºçã«ãã£ã¹ããã
double result = (double)a / b; // â çµæã¯ 2.5
察çãšããŠã¯ãæŒç®åã«å°ãªããšãäžæ¹ã double
ã float
ã«ãã£ã¹ãããããšãéèŠã§ãã
è² ã®æ°ã®åãæšãŠã§æå³ãšç°ãªãçµæã«ãªã
è² ã®å€ãåãæšãŠãéããã£ã¹ããš floor()
ã®æåã®éããçè§£ããŠããªããšãäºæããªãäžžããçºçããŸãã
äŸïŒãã£ã¹ããšfloorã®éã
double val = -3.7;
int cast_result = (int)val; // â -3ïŒãŒãæ¹åïŒ
double floor_result = floor(val); // â -4.0ïŒè² æ¹åïŒ
å¯ŸåŠæ³ïŒ
- ãåžžã«å°ããå€ãžãäžžãããå Žåã¯
floor()
- ããŒãæ¹åãžãäžžãããå Žåã¯ãã£ã¹ã
ç®çã«å¿ããéžæãå¿ èŠã§ãã
math.h
ãã€ã³ã¯ã«ãŒããå¿ããŠãã«ããšã©ãŒã«ãªã
floor()
ã ceil()
ãªã©ã®é¢æ°ã䜿çšããéã#include <math.h>
ãå¿ãããšã³ã³ãã€ã«ãšã©ãŒã«ãªããŸãããŸããWindowsç°å¢ã§ã¯ãªã³ã«ãªãã·ã§ã³ã« -lm
ãã€ããå¿
èŠããããŸãïŒLinuxã§ã¯ gcc -lm
ãå¿
èŠïŒã
å¯ŸåŠæ³ïŒ
- å¿
ã
#include <math.h>
ãèšè¿°ãã - ãã«ãæã«
-lm
ãªãã·ã§ã³ãä»ããïŒå¿ èŠãªç°å¢ã®ã¿ïŒ
åãæšãŠã®é åºãã¹ã§æå³ããªãçµæã«ãªã
èšç®ã®éäžã§åãæšãŠãå ¥ããŠããŸããšãçµæå šäœããºã¬ãããšããããŸãã
äŸïŒå²åŒåŠçã§ã®ãã¹
double price = 1000.0;
double discount = floor(price) * 0.9; // ããã¯OK
double incorrect = floor(price * 0.9); // å®éã¯ãã¡ãã䜿ããããã
å¯ŸåŠæ³ïŒ
- äœãåãæšãŠããã®ããæç¢ºã«ããŠãããé åºã決ãã
- åŠçã®æå³ãã³ã¡ã³ãã§è£è¶³ãããšãã°é²æ¢ã«åœ¹ç«ã€
æµ®åå°æ°ç¹ã®èª€å·®ã«æ³šæ
æµ®åå°æ°ç¹æŒç®ã«ã¯2鲿°ã§æ£ç¢ºã«è¡šçŸã§ããªãå€ããããããã«ãã£ãŠæãã¬èª€å·®ãçããããšããããŸãã
äŸïŒèŠãç®ã¯äžèŽããŠããã®ã«æ¯èŒã倱æ
double a = 0.1 * 3;
if (a == 0.3) {
// æåŸ
éãã«åããªãå Žåããã
}
å¯ŸåŠæ³ïŒ
- æ¯èŒã«ã¯ã誀差蚱容ç¯å²ïŒã€ãã·ãã³ïŒãã䜿ã
- éé¡ãå³å¯ãªæŽæ°åŠçã¯ãæŽæ°åïŒäŸãã°1åïŒ100éãšããŠintã§ç®¡çïŒã«çœ®ãæããã®ãæå¹
8. FAQïœCèšèªã®åãæšãŠã«é¢ãããããã質å
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãèªè
ã®æ¹ãCèšèªã§ãåãæšãŠããæ±ãéã«ããçåã«æããã€ã³ããQ&A圢åŒã§ãŸãšããŸããã
å®åãåŠç¿ã®çŸå Žã§ééããããã·ãã¥ãšãŒã·ã§ã³ãæ³å®ããããããããåçããŠããŸãã
Q1ïŒfloat
ã double
ã int
ã«ãã£ã¹ããããšã©ããªããŸããïŒ
A1ïŒå°æ°ç¹ä»¥äžãåãæšãŠããããŒãæ¹åã«äžžããããŸãã
double val = 3.9;
int result = (int)val; // â 3
ãã£ã¹ãã«ãã倿ã¯åžžã«ãŒãã«åãã£ãŠäžžãããããããæ£ã®æ°ã§ãè² ã®æ°ã§ãã0ã«è¿ã¥ããæ¹åã«ãªããŸãã
Q2ïŒfloor()
颿°ã¯è² ã®æ°ã«ã䜿ããŸããïŒ
A2ïŒã¯ãã䜿ããŸããfloor()
ã¯åžžã«ãå°ããæ¹ïŒè² ã®æ¹åïŒãã«äžžããŸãã
double val = -2.3;
double result = floor(val); // â -3.0
ãŒãæ¹åã§ã¯ãªãç¹ã«æ³šæãå¿ èŠã§ãããã£ã¹ããšã¯ç°ãªãçµæã«ãªããããç®çã«å¿ãã䜿ãåããéèŠã§ãã
Q3ïŒæŽæ°ãå²ãç®ãããå°æ°ç¹ä»¥äžãæ¶ããŸããããªãã§ããïŒ
A3ïŒCèšèªã§ã¯ãæŽæ°å士ã®é€ç®ã¯çµæãæŽæ°ã«ãªããå°æ°ç¹ä»¥äžã¯èªåçã«åãæšãŠãããŸãã
int a = 5;
int b = 2;
double result = a / b; // â 2.0
ãã®ããã«ãå ã«æŽæ°åå£«ã§æŒç®ãè¡ãããŠããæµ®åå°æ°ç¹ã«å€æããããããæåŸ éãã®çµæãåŸãããŸããã
å¯ŸåŠæ³ïŒ
double result = (double)a / b; // â 2.5
Q4ïŒæµ®åå°æ°ç¹ã®å²ãç®ã§ãåãæšãŠãã«ã¯ã©ãããã°ããã§ããïŒ
A4ïŒfloor()
颿°ã䜿ãã°ãæµ®åå°æ°ç¹æ°ã§ãåãæšãŠãããšãã§ããŸãã
double val = 5.8;
double result = floor(val); // â 5.0
å Žåã«ãã£ãŠã¯ããã£ã¹ã (int)
ã䜿ãéžæè¢ããããŸãããäžžãæ¹åã®éãã«æ³šæããŸãããã
Q5ïŒäžžãã¢ãŒãã£ãŠäœïŒãã€äœ¿ãã®ïŒ
A5ïŒäžžãã¢ãŒãã¯ãæµ®åå°æ°ç¹æŒç®æã«ã©ã®æ¹åãžäžžããããæå®ããæ©èœã§ãã
fenv.h
ã䜿ã£ãŠ FE_DOWNWARD
ã FE_TOWARDZERO
ãªã©ã«èšå®ããããšã§ãrint()
颿°ãªã©ã®åäœãå¶åŸ¡ããããšãã§ããŸãã
ãã ããéåžžã®éçºã§ã¯ããŸã䜿ãããŸããã粟å¯ãªæ°å€å¶åŸ¡ãå¿ èŠãªç§åŠæè¡èšç®ãéèç³»ã®ããã°ã©ã ã§äœ¿ãããããšãå€ãã§ãã
Q6ïŒround()
颿°ãš floor()
ã®éãã¯ïŒ
A6ïŒround()
ã¯æãè¿ãæŽæ°ã«åæšäºå
¥ãfloor()
ã¯åžžã«å°ããæŽæ°ã«åãæšãŠãŸãã
颿° | 3.7 | -3.7 |
---|---|---|
round() | 4.0 | -4.0 |
floor() | 3.0 | -4.0 |
å€ã®æ£è² ã«ãã£ãŠæåãç°ãªããããç®çã«å¿ããŠéžã³ãŸãããã
Q7ïŒåãæšãŠåŠçã®é çªã£ãŠéèŠãªãã§ããïŒ
A7ïŒã¯ãããšãŠãéèŠã§ããèšç®ã®é çªã«ãã£ãŠãæçµçãªçµæã倧ããå€ããããšããããŸãã
double price = floor(1234.56 * 0.9); // å²åŒåŸã«åãæšãŠ
// vs
double discounted = floor(1234.56) * 0.9; // å²åŒåã«åãæšãŠ
å¯ŸåŠæ³ïŒ
- äœãåãæšãŠããã®ããæç¢ºã«ããŠãããé åºã決ãã
- åŠçã®æå³ãã³ã¡ã³ãã§è£è¶³ãããšãã°é²æ¢ã«åœ¹ç«ã€
9. ãŸãšãïœç®çã«å¿ããåãæšãŠæ¹æ³ã䜿ãåããã
Cèšèªã«ããããåãæšãŠãåŠçã¯ãåãªãæ°åŠçãªæäœã§ã¯ãªããåŠçå
容ãæèã«å¿ããŠæ
éã«éžã¶ã¹ãããã°ã©ãã³ã°ææ³ã§ãã
ãã®èšäºãéããŠãããŸããŸãªåãæšãŠã®æ¹æ³ãšããã®ç¹æ§ã»çšéã®éããã玹ä»ããŠããŸãããããã§æ¹ããŠãç®çã«å¿ããæé©ãªåãæšãŠæ¹æ³ã®éžã³æ¹ãæŽçããŠãããŸãããã
äž»ãªåãæšãŠæ¹æ³ãšäœ¿ãåãã®ç®å®
æ¹æ³ | æŠèŠ | ç¹åŸŽ | é©ããçšé |
---|---|---|---|
int ãã£ã¹ã | æµ®åå°æ°ç¹ â æŽæ° | ãŒãæ¹åã«åãæšãŠ | ã·ã³ãã«ãªäžžãåŠçãããã©ãŒãã³ã¹éèŠ |
floor() 颿° | æµ®åå°æ°ç¹ã®è² æ¹åãžã®åãæšãŠ | åžžã«ãå°ããæŽæ°ããž | éé¡åŠçãå¶åŸ¡ç³»ããžã㯠|
æŽæ°å士ã®é€ç® | èªåçã«å°æ°ç¹ä»¥äžãåãæšãŠ | æç€ºçãªåŠçã¯äžèŠã ãæ³šæãå¿ èŠ | é ååå²ãã«ãŠã³ãåŠçãªã© |
fenv.h äžžãå¶åŸ¡ | äžžãã¢ãŒããèšå®ã粟å¯ãªå¶åŸ¡ãå¯èœ | ç§åŠæè¡èšç®ãç¹æ®ãªããŒãºã«å¯Ÿå¿ | 粟床éèŠã®æ°å€åŠçãäžžãã®æåæ€èšŒ |
æ£ç¢ºãªçµæãåŸãããã«æèãã¹ãããš
- äžžãæ¹åã®éãã«æ³šæ
floor()
ã¯è² æ¹åããã£ã¹ãã¯ãŒãæ¹åãããããæåãç°ãªããããç®çã«å¿ããŠéžæããŸãããã - æŒç®ã®é åºãæç¢ºã«
å°æ°ã®ãŸãŸèšç®ããŠããåãæšãŠãã®ããå ã«åãæšãŠãŠããæŒç®ããã®ãã§ãçµæã倧ããå€ããããšããããŸãã - åãšæŒç®ã®çµã¿åãããåžžã«æèãã
int
åå£«ã®æŒç®ãdouble
ã®ãã£ã¹ããfloat
ã®ç²ŸåºŠãåã«ç¡é çãªãŸãŸåŠçãé²ãããšæå³ããªãçµæãçããŸãã
æåŸã«
ããã°ã©ãã³ã°ã«ãããåãæšãŠåŠçã¯ãããããå°æ°ç¹ä»¥äžããšèŠãªãããã¡ã§ããããã®éžæäžã€ã§ãã°ã®æç¡ããŠãŒã¶ãŒäœéšãå·Šå³ãããã»ã©ã®åœ±é¿åãæã¡ãŸãã
Cèšèªã¯ãã®ç¹æ§äžãéçºè
ãæå³ãæç¢ºã«ç€ºãããšãæ±ããããèšèªã§ããã ãããããåãæšãŠåŠçãé©åã«æ±ããããšã¯ãä¿¡é Œæ§ã®é«ãããã°ã©ã ãæ§ç¯ããäžã§éåžžã«éèŠãªã¹ãã«ãšãªããŸãã
ãã®ã¬ã€ããããCèšèª åãæšãŠãã«é¢ããçè§£ãæ·±ãããã粟床ã®é«ãã³ãŒããæžãããã®äžå©ãšãªãã°å¹žãã§ãã