æãPYAVUïŒé«çŽèšèªã§ã®ããã°ã©ãã³ã°ïŒã®è¬çŸ©ã§ãå®æ°ã«ã€ããŠè©±ãããŸããã æåã®æ å ±ã¯è¡šé¢çãªãã®ã§ããã 倧åŠã§ã®ç 究ãçµããåŸãç§ã¯åœŒããããããç¥ãããã«ãªãããã®ç¥ãåãã¯ç§ã«å€ããèããããŸããã ãããŠããã®ç¥ãåãã¯ãèšç®ã§doubleããŒã¿åã«é©åããªãã£ãåŸã«çºçããŸããã
Borland Turbo C ++ã³ã³ãã€ã©ã䜿çšããŠãC ++ã§èšè¿°ãããããã°ã©ã ãå ¥æããŸããã èšç®ã«ã¯ãdoubleããŒã¿åã䜿çšãããŸããã ææã¿ã€ãã®å粟床ã ç¹å®ã®æç¹ã§ããã®äºéããã°ã©ã ããªãŒããŒãããŒããæ£åžžã«ã¯ã©ãã·ã¥ããŸããã éä¹ã¯ããã°ã©ã ã§èšç®ãããäºéã«åãŸãæ倧éä¹ã¯170ã§ãïŒ â7.3 306 éä¹171ïŒâ1,2 309ã®èšç®ã«ãããdoubleããŒã¿åã®ãªãŒããŒãããŒãçºçããŸããã å®æ°ã«ããèšç®ã®çŸåšã®ç¶æ³ã®ç 究ã«ã€ãªãã£ãã®ã¯ããªãŒããŒãããŒã®åé¡ã§ããã ããã«ã€ããŠã¯ãèšäºã®åŸåã§è©³ãã説æããŸãã
å粟床ã®å®æ°ã®ãªãŒããŒãããŒã¯ãããã°ã©ãã³ã°èšèªã«ãããµããŒããã³ã³ãã€ã©ãŒã«ãããµããŒããããã°ã©ã ãå®è¡ãããããã»ããµãŒã®ã¢ãŒããã¯ãã£ãŒã®3ã€ã®ã³ã³ããŒãã³ãã§æ§æãããã°ããŒãã«ãªåé¡ã§ãã
ããã°ã©ãã³ã°èšèªã䜿çšãããšããã¹ãŠãã·ã³ãã«ã§æšæºåãããŸãã ææã®C ++èšèªã«ã¯ãfloatãdoubleãlong doubleã®3ã€ã®å®ããŒã¿åããããããããå粟床ãå粟床ãå粟床以äžã§ãã ããã«ãèšèªæšæºã§ã¯ãlong doubleåã¯å°ãªããšãdoubleãšåçã®ç²ŸåºŠãæäŸããããšæžãããŠããŸãã ã€ãŸããlong doubleã¯double以äžã§ãªããã°ãªããŸããã Borland Turbo C ++ã³ã³ãã€ã©ã®éçºè ãå©çšããã®ã¯ãæšæºã®ãã®æãç©Žã§ããã³ã°ããã«ããããã«ã«çžåœããŸãã
x86ã¢ãŒããã¯ãã£ãã¹ã ãŒãºã«é²ãã§ããŸããã æãåçŽãªæ°åŠæŒç®ïŒå ç®ãæžç®ãä¹ç®ãé€ç®ãã·ãããæ°åŠé¢æ°sinãcosãªã©ã®èšç®ïŒã®ããã«ãããã»ããµã®éçºè ã¯å¯Ÿå¿ããã¬ãžã¹ã¿ãæäŸããŸãã ã¬ãžã¹ã¿ã¯æ¡ä»¶ä»ãã§æŽæ°ã§åäœãããã®ãšå®æ°ã§åäœãããã®ã«åããããšãã§ããŸãã å®æ°ãåŠçããããã®ã¬ãžã¹ã¿ããªãããã»ããµã¢ãŒããã¯ãã£ããããŸãã ããšãã°ãARMv7ã ãã®ãããªå ŽåãæŽæ°ã¬ãžã¹ã¿ãŒãšå ç®ãæžç®ãã·ããã®æŒç®ã䜿çšããŠãããã®æŒç®ãããã°ã©ã ã§ãšãã¥ã¬ãŒãããå¿ èŠããããããå®æ°ã®æŒç®æéã¯æ°æ¡å¢å ããŸãã ããšãã°ãäžè§é¢æ°ãããã°ã©ã ã§èšç®ãããšãæ°åŠé¢æ°ã䜿çšããŠè¿äŒŒçã«èšç®ããããããèšç®ãæ°æ¡é ããªãå¯èœæ§ããããŸãã
åæ çãªäœè«ã ããã¯ãŸãã«ãããžã§ã¯ãã®1ã€ã§ééããåé¡ã§ãã ã«ã¡ã©ã®äžãéã人ã®æ°ãæ°ããå¿ èŠããããŸããã ãªã¢ã«ã¿ã€ã ãããªåŠçã®ããã«ARMv7ã®çµã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸããã èªèãããéå»ã®äººã ãèæ ®ããã ãŸããç»ååŠçã¯å®æ°ã䜿çšããäœæ¥ã§ããã䜿çšãããŠããã¢ãŒããã¯ãã£ã«ã¯ååšããŠããŸããã§ããã ããé«åºŠãªããŒããŠã§ã¢ãœãªã¥ãŒã·ã§ã³ã«åãæ¿ããå¿ èŠããããŸããããããã¯å¥ã®è©±ã§ãã æ»ããŸãããã
80486ããã»ããµã®ãªãªãŒã¹ä»¥åã«åºã䜿çšãããŠããx86ã¢ãŒããã¯ãã£ã«ããå®éã®ã¬ãžã¹ã¿ã¯ãããŸããã§ããã æã®äººã¯ãããããåŸæ¥ã®ããã»ããµã®é£ã«ã€ã³ã¹ããŒã«ããã察å¿ããæå®ïŒ8087ã80287ããŸãã¯80387ïŒããããã¢ã¯ãã£ããªå·åŽãªãã§ãã©ãžãšãŒã¿ãŒãªãã§ãåäœããæ°åŠã³ããã»ããµãŒã®ãããªãã®ãèŠããŠããŸãã IEEE 754-1985èŠæ Œã®åºçŸã®ãã£ãããšãªã£ãã®ã¯ã8087ã³ããã»ããµã®ç»å Žã§ãããããã«ã€ããŠã¯åŸã§æ€èšããŸãã
ãããã®ã³ããã»ããµã¯ã3ã€ã®æœè±¡å®ããŒã¿åã8ã€ã®80ãããã¬ãžã¹ã¿ãããã³ããããæäœããããã®ã¢ã»ã³ãã©åœä»€ã®æãè¿œå ããŸããã ããã§ãæ¡ä»¶ä»ãã§ã1ãµã€ã¯ã«ã§ãå®æ°ã®å ç®ãæžç®ãä¹ç®ãé€ç®ãæœåºãã«ãŒãã®æœåºãäžè§é¢æ°ã®èšç®ãªã©ãå¯èœã«ãªããŸããã ç¹å®ã®ã¿ã¹ã¯ã§èšç®ã®å éã500ïŒ ã«éããŸããã ããããã¯ãŒãããã»ãã·ã³ã°ã®ã¿ã¹ã¯ã¯å éãããªãã£ãããããã®ã³ããã»ããµãŒã¯ãªãã·ã§ã³ã§150ãã«ã§ã€ã³ã¹ããŒã«ãããŸããã ãã®ãšãã³ã³ãã¥ãŒã¿ãŒã§é³æ¥œãèŽãã人ã¯ã»ãšãã©ããŸããã§ããããäžè¬çã«ã¯ãããªã¯äžè¬ãŠãŒã¶ãŒåãã§ã¯ãããŸããã§ããã
80486ã·ãªãŒãºããã»ããµãããã³ããã»ããµã¯ããã»ããµèªäœã«çµ±åããå§ããŸããã Intel486SXã«å ããŠããã®ããã»ããµã¯åŸã§ç»å Žããç¡å¹ã«ãªã£ãã³ããã»ããµããããŸããã ç©ççã«ã¯ã圌ã¯ä»ã®ããã»ããµãšããã»ã©éãã¯ãããŸããã§ããã ã©ããããIntelã¯ã³ããã»ããµãŒã®åéã§ãšã©ãŒã®ããæ¬ é¥ã®ããã³ããŒãå®è£ ããããšã決ããããã§ãã
æ°åŠã³ããã»ããµãŒã®å®éã®ã¬ãžã¹ã¿ãŒã«ã€ããŠããã«è©³ããèããŠã¿ãŸãããã å®éã«ã¯ãããã¯åãã¿ã€ãã®ã¬ãžã¹ã¿ã§ãã 倧ããã80ããããã¹ã¿ãã¯ã«8åã®ããŒã¹ââãããå Žåã ããããããã°ã©ããŒã¯å®æ°ã®æœè±¡åã«3çš®é¡ãããŸããçãïŒå粟床ïŒåœ¢åŒïŒå粟床ïŒãé·ãïŒå粟床ïŒãããã³æ°å€ãè¡šçŸããããã®æ¡åŒµåœ¢åŒïŒæ¡åŒµç²ŸåºŠïŒã§ãã ããã§ãçšèªã®ãã·ã¢èªã®ç¿»èš³ã¯æ¬[1]ããäžããããŠããŸãã å®æ°ã®ç¹æ§ãè¡šã«ç€ºããŸãã
ããã°ã©ããŒãã·ã§ãŒããã©ãŒãããïŒ32ãããïŒãªã©ã䜿çšããããšãéžæããå Žåãã³ããã»ããµãŒã¯80ãããã®ã¬ãžã¹ã¿ãŒã«æ°å€ãæ¿å ¥ããæäœãå®è¡ããŠãããäœæ¥äžã«ã·ã§ãŒããã©ãŒãããã®å¶éãçºçããå Žåãæ°å€ãçž®å°ãµã€ãºã§è¿ããŸãããNaNãè¿ãããŸããïŒæ°åã§ã¯ãªããæ°åã§ã¯ãããŸããïŒã
x86ã¢ãŒããã¯ãã£ã®ãããªãéçºã«ãããå€æ°ã®æ¡åŒµæ©èœïŒMMXãSSEãSSE2ãSSE3ãSSSE3ãSSE4ãSSE5ãAVXãAVX2ãAVX-512ãªã©ïŒãè¿œå ãããæ¡åŒµæ©èœãšãšãã«æ°ããã¬ãžã¹ã¿128ã256ã512ãããé·ãè¿œå ãããŸãã[2] ãããã³ããããæäœããããã®å€æ°ã®æ°ããã¢ã»ã³ãã©ã³ãã³ãã ãããã®æ¡åŒµæ©èœã¯ãå粟床ãšå粟床ã®å®æ°ã§ã®ã¿åäœããæ©èœãæäŸããŸããããšãã°ãå512ãããã¬ãžã¹ã¿ã¯ã8ã€ã®64ãããã®å粟床æ°ãŸãã¯16ã®32ãããã®å粟床æ°ã®ããããã§åäœã§ããŸãã
ã¢ãŒããã¯ãã£ã«ã€ããŠèããããšãããã³ã³ãã€ã©ã«ç§»ããŸãããã C ++ããã°ã©ãã³ã°èšèªã§ã¯ãfloatããŒã¿åã¯x86ã¢ãŒããã¯ãã£ã®32ãããå®æ°ã«å¯Ÿå¿ãã2åãã64ãããã«ãªããŸãããlong doubleã§ã¯ãã¹ãŠãããèå³æ·±ããã®ã«ãªããŸãã åè¿°ã®ããã«ãå€ãã®ã³ã³ãã€ã©éçºè ã¯æšæºã®ä»®å®ã䜿çšããŠãlong doubleåãdoubleã«çããããŸãã ããããããŒããŠã§ã¢x86thã§ã¯ãæ¡åŒµ80ããã圢åŒã§åäœã§ããŸãã ãããŠããããã䜿çšã§ããã³ã³ãã€ã©ããããŸãã ã³ã³ãã€ã©ã«ã€ããŠè©³ããèŠãŠã¿ãŸãããã
å¥åŠãªããšã«ã80ãããæ¡åŒµããŒã¿ãã¬ãŒã³ããŒã·ã§ã³åœ¢åŒãç¡èŠããŠãããã®ã®äžã«ã¯ãããç¥ããåºã䜿çšãããŠããã³ã³ãã€ã©ãå€æ°ãããŸããããã«ãMicrosoft Visual C ++ãC ++ BuilderãWatcom C ++ãComeau C / C ++ã®éšåçãªãªã¹ãã瀺ããŸãã ããããæ¡åŒµåœ¢åŒããµããŒãããã³ã³ãã€ã©ã®ãªã¹ãã¯éåžžã«èå³æ·±ããã®ã§ãïŒIntel C ++ãGCCãClangãOracle Solaris Studioã ã³ã³ãã€ã©ã«ã€ããŠè©³ããèŠãŠã¿ãŸãããã
Intelã®ã³ã³ãã€ã©ã¯ãæ¡åŒµãã©ãŒããããæã€ããšã«å€±æããããšã¯ãããŸããã§ãã-ã¡ãŒã«ãŒã¯ã©ã®ããã«ããŠé©åãªããŒã«ãªãã§ããŒããŠã§ã¢ãæ®ãã®ã§ãã ã³ã³ãã€ã©ã®äœ¿çšã¯ç¡æã§ã¯ãããŸããã ã³ã³ãã€ã©ã¯ãç§åŠèšç®ãé«æ§èœãã«ãããã»ããµã·ã¹ãã ã§åºã䜿çšãããŠããŸãã
ç¡æã®GCCã³ã³ãã€ã©ã¯ãLinuxãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§æ¡åŒµãã©ãŒããããç°¡åã«ãµããŒãããŸãã Windowsã§ã¯ããã¹ãŠãããèå³æ·±ããã®ã«ãªããŸãã Windowsçšã®ã³ã³ãã€ã©ã«ã¯ãMinGWãšCygwinã®2ã€ã®é©å¿ããããŸãã ã©ã¡ããæ¡åŒµåœ¢åŒãæäœã§ããŸãããMinGWã¯Microsoftã®ã©ã³ã¿ã€ã ã䜿çšããŸããã€ãŸãã64ãããã®å粟床ãè¶ ããå®æ°ã¯ã©ãã§ã衚瀺/衚瀺ã§ããŸããã Cygwinã䜿çšãããšã移æ€ãããè€éã«ãªãããããã¹ãŠãå°ãæ¹åãããŸãã
GCCãšåæ§ã«ãClangã¯æ¡åŒµåœ¢åŒããµããŒãããŠããŸãã
ãŸãã以åã¯Sun Studioã ã£ãOracle Solaris Studioã«ã€ããŠå°ãã ãã®ååšã®çµããã«åãã£ãŠããµã³ã¯å€ãã®æè¡ãå©çšå¯èœã«ããŸããã ã³ã³ãã€ã©ãå«ããŸãã ããšããšã¯ãSPARCã¢ãŒããã¯ãã£ããã»ããµãæèŒããSolaris OSçšã«éçºãããŸããã åŸã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã³ã³ãã€ã©ãšãšãã«x86çªç®ã®ã¢ãŒããã¯ãã£ã«ç§»æ€ãããŸããã IDEãšã³ã³ãã€ã©ã¯ãLinuxãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§äœ¿çšã§ããŸãã æ®å¿µãªããããã®ã³ã³ãã€ã©ã¯ãã¹ããŒã¢ããããããŠãããææ°ã®C ++ãã¬ã³ãããµããŒãããŠããŸããã
èšäºã®åé ã§è¿°ã¹ãããã«ãªãŒããŒãããŒã®åé¡ã解決ããããã«ãèããèŠãã¿ãæ¢ããåŸãã³ãŒããå®å šã«æžãçŽããGCC Cygwinã³ã³ãã€ã©ã®æ©èœã䜿çšããããšã«ããŸããã ããŒã¿ãæ ŒçŽããããã«long doubleããŒã¿åã䜿çšãããŸããã 64ããããš80ãããã®å®æ°ã䜿çšããåæ§ã®ã·ã¹ãã ã®ããã©ãŒãã³ã¹ã¯ç°ãªããŸãã 64ãããå®æ°ã䜿çšããå Žåãã³ã³ãã€ã©ã¯ãã¹ãŠãæé©åããx86ã¢ãŒããã¯ãã£ã®æéã®ãææ°ã®ãæ¡åŒµæ©èœã䜿çšããããšããŸãã 80ãããã®æ°å€ã«åãæ¿ããå Žåãã¢ãŒããã¯ãã£ã®ãå€ä»£ã®ããã³ããã»ããµãã®éšåãé¢ä¿ããŸãã
ãã¡ããã倧ããªå®æ°ãåŠçããããã®ãœãããŠã§ã¢ææ³ã䜿çšããŠãªãŒããŒãããŒåé¡ã解決ããããšã¯å¯èœã§ããããããã°ã©ã ã¯äžè§é¢æ°ãå«ãæ°åŠçã¢ãã«ãèšç®ããæ ¹ãæœåºããéä¹ãèšç®ãããããããã©ãŒãã³ã¹ã®äœäžã¯èãããªããŸãã æ¡åŒµãã©ãŒãããã䜿çšããŠã¢ãã«ãèšç®ããäœæ¥ã¯ãå ¥åãã©ã¡ãŒã¿ãŒã«å¿ããŠãçŽ8ã12æéã®ããã»ããµãŒæéãèŠããŸããã
èšäºã®çµããã«ãIEEE 754æšæº[3,4,5]ã«ã€ããŠå°ãèå¯ããŸãã åè¿°ã®ããã«ãæšæºã®æåã®ããŒãžã§ã³ã¯8087æ°åŠã³ããã»ããµãŒã®ãããã§ç»å ŽããŸãããããã®æšæºã®åŸç¶ããŒãžã§ã³ã¯1997幎ãš2008幎ã«ãªãªãŒã¹ãããŸããã 2008幎ã®æšæºã¯æãèå³æ·±ããã®ã§ãã å®æ°ã®4å粟床ïŒ4極ã4å粟床浮åå°æ°ç¹åœ¢åŒïŒ[6]ã«ã€ããŠèª¬æããŸãã äžèšã®ã¿ã¹ã¯ã«æé©ãªã®ã¯ããã®ããŒã¿ã¹ãã¬ãŒãžåœ¢åŒã§ãã ããããäžè¬çãªã³ã³ãã¥ãŒã¿ã®æé ãªäŸ¡æ Œã®ããã»ããµã¢ãŒããã¯ãã£ã«ã¯å®è£ ãããŠããŸããã äžæ¹ãx86ã¢ãŒããã¯ãã£ã«ã¯é·ãéå¿ èŠãªãµã€ãºã®ã¬ãžã¹ã¿ïŒ128ã256ã512ãããïŒããããŸããããããã€ãã®å粟床ããã³å粟床ã®æ°å€ããã°ããåŠçããã®ã«åœ¹ç«ã¡ãŸãã ã€ã³ãã«ãå°æ¥ã®ããã»ããµãŒã§4å粟床ã®ãµããŒããå°å ¥ãããšããã€ã³ã¿ãŒãããæ å ±ã§äŒããŸããããã©ãããããã¯çŽã§ããæ®ã£ãŠããªãã£ãããã§ãã
4åã®ç²ŸåºŠããµããŒãããææ°ã®ã¢ãŒããã¯ãã£ã®ãã¡ãSPARC V8ãšV9ã®ã¢ãŒããã¯ãã£ã¯åºå¥ã§ããŸãã ãããã1990幎ãš1993幎ã«ç»å ŽããŸãããã4å粟床ã®ç©ççãªå®çŸã¯2004幎ã«ã®ã¿ç»å ŽããŸããã 2015幎ãIBMã¯4åã®å®æ°ããµããŒãããPOWER9 CPUä»æ§ïŒISA 3.0ïŒããªãªãŒã¹ããŸããã
4åã®å®æ°ã®ç²ŸåºŠã¯ãå¹ åºããŠãŒã¶ãŒã«ãšã£ãŠäžèŠã§ãã äž»ã«ç§åŠèšç®ã§äœ¿çšãããŸãã ããšãã°ã倩äœç©çèšç®ã§ã ããã¯ã70-80幎代ã«è£œé ãããIBM360ã³ã³ãã¥ãŒã¿ãŒã128ãããã®å®æ°ããµããŒãããŠããçç±ã説æã§ããŸããããã¡ããææ°ã®IEEE 754ã«å¯Ÿå¿ããŠããŸããã§ããã
ãŸããMCSTããã»ããµã®ãã·ã¢ã®éçºè ã«ã€ããŠãå°ã話ããŠã¿ãŸãããã ãã®äŒç€Ÿã¯ãSPARCã¢ãŒããã¯ãã£ããã»ããµãèšèšããã³è£œé ããŠããŸãã ããããèå³æ·±ãããšã«ãæåã¯4ã€ã®å®æ°ããµããŒãããã«ãå€ããSPARC V8ã¢ãŒããã¯ãã£ïŒ2001幎ã®MTsST-R150ããã³2004幎ã®MTsST R500ïŒã®ããã»ããµãéçºããã³ãªãªãŒã¹ããŸããã ãããŠ2011幎ã«ãªã£ãŠã圌ãã¯4å粟床ã®å®æ°ããµããŒãããSPARC V9ã¢ãŒããã¯ãã£ãåããMCST R1000ããã»ããµããªãªãŒã¹ããŸããã
IEEE 754æšæºã«é¢ããããå°ãã®èšèã€ã³ã¿ãŒãããã«é¢ããèå³æ·±ãèšäº[3]ã«ã¯ãéåžžã«ææ çã«ãæ¢åã®æšæºã®åé¡ãšæ¬ ç¹ã説æãããŠããŸãã èšäº[4]ã§ã¯ãæšæºãšãã®åé¡ã«ã€ããŠã説æããŠããŸãã ããã«ãå®æ°ãè¡šçŸããããã®æ°ããã¢ãããŒãã®å¿ èŠæ§ã«ã€ããŠã説æããŠããŸãã äžèšã®2ã€ã®èšäºã§ã¯ãæ°åã®è¡šçŸã®æ¬ ç¹ã®å€ãã«ã€ããŠèª¬æããŠããŸãããç§ã¯ãããè¿œå ããŸãã ããã°ã©ãã³ã°ã§ã¯ããæŸèæããäœãééã£ãŠãããšããçšèªããããŸãããæé©ãªæ¹æ³ã§ã¯ãªããç¹å®ã®æéã«çŸåšã®åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸãã ãããã£ãŠãIEEE754æšæºã«å¯Ÿå¿ããå®æ°ã¯æŸèæã§ãã
ãããŠããªããã®çµè«ãããã«çŸããŸããã è² ã®ãŒãããªãããã10é²åœ¢åŒãžã®å€æãšãã®éã¯ãããŸãã§ããå®æ°ãæ±ãå Žåãããã°ã©ããŒã¯ãå¯èœãªå€ã®ç¯å²ã®èš±å®¹éçã«è¿ã¥ããšãã®å®æ°ã®å±éºãªåäœãåžžã«èŠããŠããå¿ èŠããããå®æ°ãæ¯èŒãããšãã¯ã蚱容ç¯å²ã®ç²ŸåºŠã§ç¯å²ãæ¯èŒããå¿ èŠããããŸãã
é åçãªçŽ æãšãœãŒã¹ïŒ
- ãŠããV.I. ã¢ã»ã³ãã©ãŒã é«æ ¡åãã®æç§æžã 第2ç -SPbãïŒPeter 2005
- x86
- ãŠãããããŒV.M. IEEE754-tikaã¯äººé¡ãè ãã
- Yashkardin V. IEEE 754- ãã€ããªæµ®åå°æ°ç¹æŒç®æšæº
- IEEE 754ãŠã£ãããã£ã¢ã®èšäºïŒ1ã2ã3
- å®æ°ã®4å粟床ã«é¢ãããŠã£ãããã£ã¢ã®èšäº