ç»å-www.freepik.com
æ°å¹Žåãç§ã¯æµ®åå°æ°ç¹æŒç®ã«ã€ããŠå€ãã®ããšãèããæžããŸããããšãŠãé¢çœãã£ãããç ç©¶ã®éçšã§ããããã®ããšãåŠã³ãŸããããå®éã«ã¯é·ãé䜿ããªãã£ãããšãããããããã®ã¹ãã«ã¯ãã¹ãŠå€§å€ãªåŽåãèŠããŸããããã®ãããããŸããŸãªå°éç¥èãå¿ èŠãªãã°ã«åãçµããã³ã«ããšãŠãå¬ããæããŸãããã®èšäºã§ã¯ãChromiumã§åŠãã ãããŒãã£ã³ã°ãã€ã³ãã®ãã°ã«ã€ããŠ3ã€ã®ã¹ããŒãªãŒã玹ä»ããŸãã
ããŒã1ïŒéçŸå®çãªæåŸ
ãã®ãã°ã¯ãJSONã64ãããã®æŽæ°ãæ£ããè§£æããªãããšåŒã°ããŠããŸãããæåã¯ãããŒãã£ã³ã°ãã€ã³ãããã©ãŠã¶ã®åé¡ã®ããã«ã¯èŠããŸããããcrbug.comã«æçš¿ãããã®ã§ã確èªããããã«äŸé ŒãããŸãããåäœæããæãç°¡åãªæ¹æ³ã¯ãChromeéçºè ããŒã«ïŒF12ãŸãã¯Ctrl + Shift + IïŒãéããæ¬¡ã®ã³ãŒããéçºè ã³ã³ãœãŒã«ã«è²Œãä»ããããšã§ãã
json = JSON.parse(â{âxâ: 2940078943461317278}â); alert(json[âxâ]);
äžæãªã³ãŒããã³ã³ãœãŒã«ãŠã£ã³ããŠã«æ¿å ¥ããããšã¯ãããã³ã°ããã®ã«æé©ãªæ¹æ³ã§ãããã³ãŒãã¯éåžžã«åçŽã§ãæªæã®ãããã®ã§ã¯ãªããšå€æã§ããŸããããã°ã¬ããŒãã§ãèè ã¯åœŒã®æåŸ ãšå®éã®çµæã芪åã«ç€ºããŸããïŒ
æåŸ ãããåäœã¯äœã§ããïŒ2940078943461317278ã®æŽæ°å€ãè¿ãããŸãã
ãšã©ãŒã¯äœã§ããïŒä»£ããã«ãæŽæ°2940078943461317000ãè¿ãããŸãã
ããã°ãã¯Linuxã§èŠã€ãããChrome for Windowsã§äœæ¥ããŠããŸããããã®åäœã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ãããæµ®åå°æ°ç¹æ°ã«ã€ããŠã®ç¥èããã£ãã®ã§ã調æ»ããŸããã
JavaScriptã«ã¯å®éã«ã¯æŽæ°åããªãããããã®æŽæ°ã®åäœã¯æœåšçã«æµ®åå°æ°ç¹ã®ãã°ã§ããåãçç±ã§ãããã¯å®éã«ã¯ãã°ã§ã¯ãããŸããã
å ¥åããæ°å€ã¯ããªã倧ããã2.9e18ãšã»ãŒåãã§ãããããŠãããåé¡ã§ãã JavaScriptã«ã¯æŽæ°åããªããããæ°å€ã«ã¯IEEE-754æµ®åå°æ°ç¹å粟床ã䜿çšããŸãããã®ãã€ããªæµ®åå°æ°ç¹åœ¢åŒã«ã¯ã笊å·ãããã11ãããã®ææ°ãããã³53ãããã®ãã³ãã£ããµããããŸãïŒã¯ãã65ãããã§ã1ãããã¯éæ³ã§é ãããŠããŸãïŒïŒããã®doubleåã¯æŽæ°ã®æ ŒçŽã«éåžžã«åªããŠãããããå€ãã®JavaScriptããã°ã©ããŒã¯æŽæ°åããªãããšã«æ°ã¥ããŸããã§ãããããããéåžžã«å€ãã®äººããã®å¹»æ³ãç Žå£ããŸãã
JavaScriptçªå·ã¯ã2 ^ 53ãŸã§ã®ä»»æã®æŽæ°å€ãæ£ç¢ºã«æ ŒçŽã§ããŸãããã®åŸã2 ^ 54ãŸã§ã®ãã¹ãŠã®å¶æ°ãæ ŒçŽã§ããŸãããããŠã2 ^ 55ãŸã§ã®4ã€ã®æ°å€ã®ãã¹ãŠã®åæ°ãæ ŒçŽã§ããŸãã
åé¡çªå·ã¯ãããŒã¹2ã®ææ°è¡šèšã§è¡šãããŸããããã¯çŽ1.275 * 2 ^ 61ã§ãããã®ééã§è¡šçŸã§ããæŽæ°ã®æ°ã¯ãããããã§ããæ°å€éã®è·é¢ã¯512ã§ãã察å¿ãã3ã€ã®æ°å€ã¯æ¬¡ã®ãšããã§ãã
- 2 940 078 943 461 317 278ã¯ããã°ã¬ããŒãã®äœæè ãä¿æãããã£ãçªå·ã§ãã
- 2 940 078 943 461 317 120-ãã®æ°å€ã«æãè¿ã2åïŒããæªæºïŒ
- 2 940 078 943 461 317 632-次ã«è¿ãæ°åã®doubleïŒãããã倧ããïŒ
å¿ èŠãªæ°ã¯ãããã2ã€ã®doubleã®éã®ééã«ãããJSONã¢ãžã¥ãŒã«ïŒããšãã°ãJavaScriptèªäœãŸãã¯ããã¹ããdoubleã«å€æããããã®ãã®ä»ã®æ£ããå®è£ ããã颿°ïŒãæåãå°œãããæãè¿ãdoubleãè¿ããŸãããç°¡åã«èšããšãã¬ããŒãã®äœæè ãä¿åãããçªå·ã¯ãçµã¿èŸŒã¿ã®JavaScriptæ°å€ã¿ã€ãã«ã¯ä¿åã§ããŸããã
ãããŸã§ã®ãšããããã¹ãŠãæç¢ºã§ããèšèªã®éçã«éããå Žåã¯ããããã©ã®ããã«æ©èœãããã«ã€ããŠãã£ãšç¥ãå¿ èŠããããŸãããããããŸã ãã1ã€ã®è¬ããããŸãããã°ã¬ããŒãã«ãããšãå®éã«ã¯æ¬¡ã®çªå·ãè¿ãããŸãã
2 940 078 943 461 317 000
å ¥åãããæ°å€ã§ã¯ãªããæãè¿ãdoubleã§ããå®éã«ã¯doubleãšããŠè¡šçŸã§ããæ°å€ã§ããªããããç¶æ³ã¯äžæè°ã§ãã
ãã®ããºã«ã¯ãJavaScript仿§ã§ã説æãããŠããŸãã仿§ã§ã¯ãæ°å€ãå°å·ããå Žåãå®è£ ã¯ãããäžæã«èå¥ããã®ã«ååãªæ¡æ°ãåºåããå¿ èŠãããããã以äžã¯åºåããªããšèŠå®ãããŠããŸããããã¯ã0.1ã®ããã«æ£ç¢ºã«doubleãšããŠè¡šãããšãã§ããªãæ°å€ãå°å·ããå Žåã«åœ¹ç«ã¡ãŸããããšãã°ãJavaScriptã§ä¿åãããå€ãšããŠ0.1ãåºåããå¿ èŠãããå Žåãæ¬¡ã®ããã«åºåãããŸãã
0.1000000000000000055511151231257827021181583404541015625
æ£ç¢ºãªçµæ ã«ãªããŸãããæçšãªãã®ã远å ããªãããšã§äººã ãæ··ä¹±ãããã ãã§ããç¹å®ã®ã«ãŒã«ã¯ããã«ãããŸãïŒãçªå·ã¿ã€ãã«é©çšãããToStringãã®è¡ãæ¢ããŠãã ããïŒã仿§ã«æ«å°Ÿã®ãŒããå¿ èŠã ãšã¯æããŸãããã確ãã«å¿ èŠã§ãã
ãããã£ãŠãããã°ã©ã ãå®è¡ãããšãJavaScriptã¯2,940,078,943,461,317,000ãåºåããŸããçç±ã¯æ¬¡ã®ãšããã§ãã
- JavaScriptçªå·ãšããŠä¿åãããšãå ã®çªå·ã®å€ã倱ãããŸãã
- 衚瀺ãããæ°å€ã¯ãä¿åãããŠããå€ã«ååã«è¿ããããäžæã«èå¥ã§ããŸã
- 衚瀺ãããçªå·ã¯ãä¿åãããŠããå€ãäžæã«èå¥ããæãåçŽãªçªå·ã§ãã
ãã¹ãŠãæ£åžžã«æ©èœããŸããããã¯ãã°ã§ã¯ãªããåé¡ã¯WontFixïŒãå埩äžèœãïŒãšããŠã¯ããŒãºãããŸããå ã®ãã°ã¯ããã«ãããŸãã
ããŒã2ïŒæªãã€ãã·ãã³
ä»åã¯ãå°æ¥ã®äžä»£ã®éçºè ã®æ··ä¹±ãé¿ããããã«ãæåã«Chromiumã§ã次ã«googletestã§ãã°ãå®éã«ä¿®æ£ããŸããã

ãã®ãã°ã¯ãçªç¶çºçãå§ããéæ±ºå®è«çãªãã¹ãã®å€±æã§ããããããã®ãããŸããªãã¹ãã®å€±æã¯å«ãã§ããäœå¹Žãå€ãã£ãŠããªããã¹ãã§çºçãå§ãããšãç¹ã«æ··ä¹±ããŸããæ°é±éåŸãç§ã¯èª¿æ»ã®ããã«é£ããŠããããŸããããšã©ãŒã¡ãã»ãŒãžïŒè¡ã®é·ããå°ã倿ŽïŒã¯æ¬¡ã®ããã«å§ãŸããŸããã
expected_microsecondsãšconverted_microsecondsã®å·®ã¯512ã§ã1.0ãè¶ ããŠããŸã[expected_microsecondsãšconverted_microsecondsã®å·®ã¯512ã§ã1.0ãè¶ ããŠããŸã]
ã¯ããããã¯æªãã§ãããããã¯ã1.0以äžã®ééã§ããå¿ èŠããã2ã€ã®æµ®åå°æ°ç¹å€ãå®éã«ã¯512é¢ããŠããããšã瀺ãgoogletestãšã©ãŒã¡ãã»ãŒãžã§ãã
æåã®èšŒæ ã¯ãæµ®åå°æ°ç¹æ°ã®éãã§ããã2ã€ã®æ°åãæ£ç¢ºã«2 ^ 9ã§åºåãããŠããããšã¯éåžžã«çãããããã§ãããäžèŽïŒããã¯æããŸãããæ¯èŒãããŠãã2ã€ã®å€ã瀺ããæçš¿ã®æ®ãã®éšåã¯ãç§ã«ããã«å€ãã®çç±ã確信ãããŸããïŒ
expected_microsecondsã¯4.2934311416234112e + 18ãš
è©äŸ¡ãããconverted_microsecondsã¯4.2934311416234107e +18ãšè©äŸ¡ãããŸãã
IEEE 754ãš ååé·ãéæŠã£ãŠããå Žåã¯ãäœãèµ·ãã£ãŠããã®ãããã«çè§£ã§ããŸãã
ããªãã¯æåã®éšåãèªãã ã®ã§ãåãæ°ã®ããã«déjà vuãæããããšãã§ããŸããããããããã¯ãŸã£ããã®å¶ç¶ã§ããç§ã¯åºäŒã£ãæ°åã䜿çšããŠããŸããä»åã¯ææ°åœ¢åŒã§è¡šç€ºãããŠãããããèšäºãå°ã倿§åããŠããŸãã
äž»ãªåé¡ã¯ãæåã®éšåããã®åé¡ã®ããªãšãŒã·ã§ã³ã§ããã³ã³ãã¥ãŒã¿ãŒã®æµ®åå°æ°ç¹æ°ã¯ãæ°åŠè ã䜿çšããå®éã®æ°ãšã¯ç°ãªããŸããå¢å ããã«ã€ããŠç²ŸåºŠãäœäžãããã¹ãŠã®doubleã¯ã倱æããæ°å€ã®ç¯å²ã§å¿ ç¶çã«512ã®åæ°ã«ãªããŸããDoubleã®ç²ŸåºŠã¯53ãããã§ããããããã®æ°å€ã¯2 ^ 53ããã¯ããã«å€§ããããã粟床ã®å€§å¹ ãªäœäžã¯é¿ããããŸããã§ããããããŠä»ãç§ãã¡ã¯åé¡ãçè§£ããããšãã§ããŸãã
ãã¹ãã§ã¯ã2ã€ã®ç°ãªãæ¹æ³ã§åãå€ãèšç®ããŸãããæ¬¡ã«ãçµæãè¿ããã©ããã確èªããŸããããè¿ãããšã¯ã1.0以å ã®éããæå³ããŸããèšç®æ¹æ³ã¯éåžžã«ãã䌌ãçããåºããã®ã§ãã»ãšãã©ã®å Žåãçµæã¯2åã®ç²ŸåºŠã§åãå€ã«äžžããããŸãããããããæã ãæ£è§£ã¯å±æ²ã®é£ã«ããã1ã€ã®èšç®ã¯äžæ¹åã«äžžããããä»ã®èšç®ã¯å¥ã®æ¹åã«äžžããããŸãã
ããå ·äœçã«ã¯ãçµæãšããŠã以äžã®æ°å€ãæ¯èŒãããŸããã
- 4293431141623410688
- 4293431141623411200
ææ°ããªãå Žåãããããæ£ç¢ºã«512ã§åºåãããŠããããšãããé¡èã«ãªããŸãããã¹ã颿°ã«ãã£ãŠçæããã2ã€ã®ç¡éã«æ£ç¢ºãªçµæã¯ãåžžã«1.0æªæºããç°ãªããŸããã§ãããã€ãŸãã429 ... 10653.5ã429 ... 10654.3ã®ãããªå€ã®å Žåãäž¡æ¹ãšã429 ... 10688ã«äžžããããŸããããã®åé¡ã¯ãç¡éã«æ£ç¢ºãªçµæã4293431141623410944ã®ãããªå€ã«è¿ãå Žåã«çºçããŸããããã®å€ã¯ã2ã€ã®doubleã®ã¡ããã©äžéã«ãããŸããäžæ¹ã®é¢æ°ã429 ... 10943.9ãçæããããäžæ¹ã®é¢æ°ã429 ... 10944.1ãçæããå Žåããããã®çµæãããã0.2ã®å€ã§å²ããšãããŸããŸãªæ¹åã«äžžãããã512ã®è·é¢ã«ãªããŸãã
ããã¯ã屿ãŸãã¯ã¹ããã颿°ã®æ§è³ªã§ããäºãã«ä»»æã«è¿ããã屿²ã®å察åŽã«ãã2ã€ã®çµæïŒ2ã€ã®éã®ã¡ããã©äžéç¹ïŒãååŸã§ãããããç°ãªãæ¹åã«äžžããããŸããäžžãã¢ãŒãã倿Žããããšããå§ãããŸãããããã¯åœ¹ã«ç«ã¡ãŸãããã€ãŸãã屿²ç¹ãç§»åããã ãã§ãã
ããã¯çå€äžé ã«èµ€ã¡ãããç£ããããªãã®ã§ã-ããããªãããã€ãã³ãã®æ¥ä»ïŒãŸãã¯ãããã1幎ãäžçŽããŸãã¯å幎çŽïŒãæ°žä¹ ã«å€ããå¯èœæ§ããããŸãã
ããããç§ã®ã³ãããããŒãã¯é床ã«åçã§ããããééãã¯ãããŸããã§ãããç§ã¯ãã®ç¶æ³ã«å¯ŸåŠã§ãããŠããŒã¯ãªã¹ãã·ã£ãªã¹ãã®ããã«æããŸããã
commit 6c2427457b0c5ebaefa5c1a6003117ca8126e7bc
äœæè ïŒBruce Dawson
æ¥ä»ïŒFri Dec 08 21ïŒ58ïŒ502017ã©ãŒãž
ããã«æ¯èŒã®ã€ãã·ãã³èšç®ãä¿®æ£ãã
ç§ã®äººçã¯ãã®ãã°ä¿®æ£ã«è³ã£ãŠããŸãã[ç§ã®äººçã¯ãã®ãã°ãä¿®æ£ããããã«ç§ãå°ããŸããã]
å®éãç§ã®æçš¿ã®ãã¡2ã€ïŒ2ïŒïŒã«åççã«ãªã³ã¯ããŠããã³ãããããŒãã䜿çšããŠãChromiumã«å€æŽãå ããããšã¯ãã£ãã«ãããŸããã
ãã®å Žåã®ä¿®æ£ã¯ãèšç®ãããå€ã®å€§ããã§2ã€ã®é£æ¥ããdoubleéã®å·®ãèšç®ããããšã§ãããããã¯ããã£ãã«äœ¿çšãããªãnextafter颿°ã䜿çšããŠè¡ãããŸãããå€ããå°ãªãããã®ããã«ïŒ
epsilon = nextafter(expected, INFINITY) â expected;
if (epsilon < 1.0)
epsilon = 1.0;
nextafter 颿°ã¯ã次ã®doubleïŒãã®å Žåã¯ç¡é倧æ¹åïŒãæ€åºããæžç®ïŒæ£ç¢ºã«å®è¡ãããããã¯éåžžã«äŸ¿å©ã§ãïŒã¯ããã®å€ã§doubleéã®å·®ãæ€åºããŸãããã¹ããããã¢ã«ãŽãªãºã ã¯1.0ã®ãšã©ãŒã瀺ããã®ã§ãã€ãã·ãã³ã¯ãã®å€ãè¶ ããŠã¯ãªããŸããããã®ã€ãã·ãã³ã®èšç®ã«ãããå€ã®ééã1.0æªæºã§ãããã飿¥ããdoubleã§ããããéåžžã«ç°¡åã«ç¢ºèªã§ããŸãã
ãã¹ããçªç¶å€±æãå§ããçç±ã¯èª¿æ»ããŠããŸããããã¿ã€ããŒã®é »åºŠãŸãã¯ã¿ã€ããŒã®éå§ç¹ã®å€æŽãåå ã§æ°å€ã倧ãããªã£ãã®ã§ã¯ãªãããšæããŸãã
. QueryPerformanceCounter (QPC), <int64>::max(), 2^63-1. , . , , QPC 2 148 . , QPC, , , , , 3 . QPC 2^63-1 , .
, , QueryPerformanceCounter.
googletest

åé¡ãçè§£ããã«ã¯æµ®åå°æ°ç¹ã®è©³çްã«é¢ããé£è§£ãªç¥èãå¿ èŠã§ããããšã«è ¹ãç«ãŠãã®ã§ãgoogletestãä¿®æ£ããããšæããŸãããç§ã®æåã®è©Šã¿ã¯ã²ã©ãçµãã£ãã
ç§ã¯ããšããšããããã«å°ããã€ãã·ãã³ãéä¿¡ãããšãã«EXPECT_NEARã倱æãããããšã§ãgoogletestãä¿®æ£ããããšããŸããããGoogleå ã®å€ãã®ãã¹ãããããŠããããGoogleå€ã®å€ãã®ãã¹ãããdoubleå€ã«å¯ŸããŠèª€ã£ãŠEXPECT_NEARã䜿çšããŠããããã§ããå°ããããŠåœ¹ã«ç«ããªãã€ãã·ãã³å€ãæž¡ããŸãããæ¯èŒããæ°å€ã¯åãã§ããããããã¹ãã¯æåããŸããåé¡ã®è§£æ±ºã«è¿ã¥ãããšãªãEXPECT_NEARã䜿çšãã12ã®ãã€ã³ããä¿®æ£ããã®ã§ããããããŸããã
ç§ããã®æçš¿ãæžããŠããéïŒãã°ãçŸããŠããã»ãŒ3幎åŸïŒïŒãgoogletestãä¿®æ£ããããšãããã«å®å šã§ç°¡åã§ããããçè§£ããŸãããã³ãŒããã€ãã·ãã³ãå°ãªãããEXPECT_NEARã䜿çšãããã¹ããæåããå ŽåïŒã€ãŸããå€ãå®éã«çããå ŽåïŒãããã¯åé¡ã§ã¯ãããŸãããããã¯ãã¹ãã倱æããå Žåã«ã®ã¿åé¡ã«ãªãããã倱æããå Žåã«ã®ã¿å°ããããã€ãã·ãã³å€ãæ€çŽ¢ããåæã«æçãªã¡ãã»ãŒãžã衚瀺ããã ãã§ååã§ããã
ç§ã¯ãã®å€æŽãè¡ã£ãããä»ããã®ããã«ããã®2017幎ã®ã¯ã©ãã·ã¥ã«ãã¯ã¹ã®ããã®ãšã©ãŒã¡ãã»ãŒãžïŒ
expected_microseconds converted_microseconds 512,
expected_microseconds 4.2934311416234112e+18,
converted_microseconds evaluates to 4.2934311416234107e+18.
abs_error 1.0, double , 512; EXPECT_NEAR EXPECT_EQUAL. EXPECT_DOUBLE_EQ.
EXPECT_DOUBLE_EQã¯å®éã«ã¯çãããã©ããããã§ãã¯ãããdoubleãæåŸã®æ¡ã®4ãŠãããïŒæåŸã®å Žæã®ãŠããããULPïŒã«çãããã©ããããã§ãã¯ããããšã«æ³šæããŠãã ããããã®æŠå¿µã®è©³çްã«ã€ããŠã¯ãç§ã®æçš¿ãæµ®åå°æ°ç¹æ°ã®æ¯èŒããåç §ããŠãã ããã
ã»ãšãã©ã®ãœãããŠã§ã¢éçºè ããã®æ°ãããšã©ãŒã¡ãã»ãŒãžãèŠãŠæ£ããéããã©ãããšãé¡ã£ãŠããŸãããããŠãGoogletestã®ä¿®æ£ã¯ãChromiumãã¹ãã®ä¿®æ£ãããæçµçã«éèŠã§ãããšä¿¡ããŠããŸãã
ããŒã3ïŒx + y = xïŒyïŒ= 0ïŒã®å Žå
ããã¯ãå¢çã«è¿ã¥ããšãã®ç²ŸåºŠã®åé¡ã®å¥ã®ããªãšãŒã·ã§ã³ã§ãããããããåãæµ®åå°æ°ç¹ã®ãã°ãäœåºŠãäœåºŠãèŠã€ããŸããïŒ
ãã®ããŒãã§ã¯ãChromiumãœãŒã¹ã³ãŒãã調æ»ããããã¯ã©ãã·ã¥ã®åå ã調æ»ãããããå Žåã«é©çšã§ãããããã°ææ³ã«ã€ããŠã説æããŸãã

ãã®åé¡ã«ééãããšãããchromeã§ã®OOMïŒOut of MemoryïŒãšã©ãŒã«ããã¯ã©ãã·ã¥ïŒ//ãºãŒã ã€ã³æã®ãã¬ãŒã¹ããšããã¿ã€ãã«ã®ãã°ã¬ããŒããæçš¿ããŸããããããŒãã£ã³ã°ãã€ã³ãã®ãã°ã®ããã«ã¯èãããŸããã
ãã€ãã®ããã«ãç§ã¯èªåã§åé¡ãæ¢ããŠããŸããã§ããããã¯ãã ãå匷ããŠããŸããïŒ//ãã¬ãŒã¹ããããã€ãã®ã€ãã³ããçè§£ããããšããŠããŸããæ²ããã¿ããçªç¶çŸããŸãã-倱æããããŸããã
Chromeã®ææ°ã®ã¯ã©ãã·ã¥ã¯chromeã§è¡šç€ºããã³ããŠã³ããŒãã§ããŸãã//ã¯ã©ãã·ã¥ããŸãããã¯ã©ãã·ã¥ãã³ãããããã¬ãŒã«ããŒããããã£ãã®ã§ãããŒã«ã«ã«ä¿åãããŠããå Žæã調ã¹ãŸããã
ïŒ localappdataïŒ \ Google \ Chrome \ãŠãŒã¶ãŒããŒã¿\ã¯ã©ãã·ã¥ããã\ã¬ããŒã
ææ°ã®ã¯ã©ãã·ã¥ãã³ããwindbgã«ã¢ããããŒããïŒVisual Studioãåæ§ã§ãïŒã調æ»ã«é²ã¿ãŸããã ChromeãšMicrosoftã®ã·ã³ãã«ãµãŒããŒãæ§æãããœãŒã¹ãµãŒããŒãæå¹ã«ããã®ã§ããããã¬ãŒã¯PDBïŒãããã°æ å ±ïŒãšå¿ èŠãªãœãŒã¹ãã¡ã€ã«ãèªåçã«ããŠã³ããŒãããŸããããã®ã¹ããŒã ã¯èª°ã§ãå©çšã§ããããšã«æ³šæããŠãã ããããã®éæ³ãæ©èœããããã«ãGoogleã®åŸæ¥å¡ãChromiumã®éçºè ã§ããå¿ èŠã¯ãããŸããã Chrome / Chromiumã®ãããã°ãèšå®ããæé ã«ã€ããŠã¯ããã¡ããã芧ãã ããããœãŒã¹ã³ãŒãã®èªåããŠã³ããŒãã«ã¯ãPythonã®ã€ã³ã¹ããŒã«ãå¿ èŠã§ãã
ã¯ã©ãã·ã¥åæã«ãããã¡ã¢ãªäžè¶³ãšã©ãŒã¯ãv8ïŒJavaScriptãšã³ãžã³ïŒé¢æ°NewFixedDoubleArrayãåå ã§ããããšã瀺ãããŸããã75,209,227èŠçŽ ã®é åãå²ãåœãŠãããšããŸãããã®ã³ã³ããã¹ãã§èš±å¯ãããæå€§ãµã€ãºã¯ã67,108,863ïŒ16鲿°ã§0x3FFFFFFïŒã§ãã
ç§ãèªåã§åŒãèµ·ãããã°ãªããã®è¯ããšããã¯ãããæ³šææ·±ãç£èŠããããšã§ã°ãªãããåçŸã§ããããšã§ããå®éšã«ãããšããºãŒã ãããšãã¯ãªãã£ã«ã«ãã€ã³ãã«å°éãããŸã§ã¡ã¢ãªã¯å®å®ãããŸãŸã§ããããã®åŸãã¡ã¢ãªäœ¿çšéãçªç¶æ¥å¢ããäœãããªããŠãã¿ããã¯ã©ãã·ã¥ããŸããã
ããã§ã®åé¡ã¯ããã®å€±æã®ã³ãŒã«ã¹ã¿ãã¯ãç°¡åã«è¡šç€ºã§ããããšã§ããããChromeã®ã³ãŒãã®C ++éšåã§ãã衚瀺ã§ããŸããã§ããããã ããæããã«ããã°èªäœã¯chromeã«çŸããŸããïŒ// JavaScriptã³ãŒãããã¬ãŒã¹ããŸãããããã¬ãŒã®äžã§Chromeã®ã«ããªã¢ãã«ãïŒæ¯æ¥ïŒã§ãã¹ãããããšãããšã次ã®å¥åŠãªã¡ãã»ãŒãžã衚瀺ãããŸããã
==== JSã¹ã¿ãã¯ãã¬ãŒã¹=====================================
æ®å¿µãªããããã®è峿·±ãã©ã€ã³ã®èåŸã«ã¯ã¹ã¿ãã¯ãã¬ãŒã¹ããããŸããã§ãããgitã®èéãå°ãããŸãã£ãåŸãOOMãä»ããŠJSã³ãŒã«ã¹ã¿ãã¯ãåºåããæ©èœã2015幎ã«è¿œå ããã2019幎12æã«åé€ãããããšãããããŸããã
ç§ã¯2020幎1æã®åãã«ãã®ãã°ã調æ»ããŸããïŒãã¹ãŠãç¡å®ã§ç°¡åã ã£ãå€ãè¯ãæä»£ãèŠããŠããŸããïŒïŒãããŠããã¯ã¹ã¿ãã¯ãã¬ãŒã¹ã³ãŒãOOMãæ¯æ¥ã®ãã«ãããåé€ãããããããã§ãå®å®ããã¢ã»ã³ããªã®ãŸãŸã§ããããšãæå³ããŸãã...
ãããã£ãŠã次ã®ã¹ãããã¯ãå®å®ããããŒãžã§ã³ã®Chromeã§ãã°ãåçŸããããšã§ãããããã«ãããæ¬¡ã®çµæãåŸãããŸããïŒããããããããããã«å°ãç·šéããŸããïŒã
0ïŒExitFrame [pcïŒ00007FFDCD887FBD]
1ïŒdrawGrid_ [000016011D504859] [chromeïŒ//tracing/tracing.jsïŒã4750]
2ïŒdraw [000016011D504821] [chromeïŒ//tracing/tracing.jsïŒ4750]

ã€ãŸããOOMã®ã¯ã©ãã·ã¥ã¯ãx_axis_track.htmlã§ïŒChromiumã³ãŒãã«ãã¯ã¢ããããŒãžã䜿çšããŠïŒèŠã€ããdrawGrid_ãåå ã§çºçããŸããããã®ãã¡ã€ã«ãå°ã調æŽããåŸãupdateMajorMarkDataãåŒã³åºãããã«çµã蟌ã¿ãŸããããã®é¢æ°ã«ã¯ãåé¡ã®åå ã§ããmajorMarkWorldPositions_.push颿°ãåŒã³åºãã«ãŒããå«ãŸããŠããŸãã
ããã§èšåãã䟡å€ãããã®ã¯ãç§ã¯ãã©ãŠã¶ãŒãéçºããŠããŸãããç§ã¯äŸç¶ãšããŠäžçææªã®JavaScriptããã°ã©ããŒã§ããC ++ã·ã¹ãã ããã°ã©ãã³ã°ã®ã¹ãã«ã¯ããããã³ããšã³ããã®éæ³ãç§ã«äžããŸããããã®ãã°ãçè§£ããããã«JavaScriptããããã³ã°ããããšã¯ãç§ã«ãšã£ãŠéåžžã«èŠçãªããã»ã¹ã§ããã
ã«ãŒãïŒããã§è¡šç€ºã§ããŸãïŒã¯æ¬¡ã®ããã«ãªããŸããã
for (let curX = firstMajorMark;
curX < viewRWorld;
curX += majorMarkDistanceWorld) {
this.majorMarkWorldPositions_.push(
Math.floor(MAJOR_MARK_ROUNDING_FACTOR * curX) /
MAJOR_MARK_ROUNDING_FACTOR);
}
ã«ãŒãã®åã«ãããã°åºåã¹ããŒãã¡ã³ãã远å ãã以äžã«ç€ºãããŒã¿ãååŸããŸãããç»åãæ¡å€§ãããšãéèŠã§ãããã¯ã©ãã·ã¥ãåŒãèµ·ããã«ã¯äžååãªæ°å€ã¯ã次ã®ããã«ãªããŸããã
firstMajorMarkïŒ885.0999999642371
majorMarkDistanceWorldïŒ1e-13
次ã«ããºãŒã ã€ã³ããŠã¯ã©ãã·ã¥ãåŒãèµ·ãããŸãããæ¬¡ã®ãããªæ°å€ã衚瀺ãããŸããã
firstMajorMark: 885.0999999642371
majorMarkDistanceWorld: 5e-14
885ã5e-14ã§å²ããš1.8e16ã«ãªããå粟床浮åå°æ°ç¹æ°ã®ç²ŸåºŠã¯2 ^ 53ãã€ãŸã9.0e15ã«ãªããŸãããããã£ãŠãmajorMarkDistanceWorldïŒã°ãªãããã€ã³ãéã®è·é¢ïŒãfirstMajorMarkïŒæåã®ã¡ãžã£ãŒã°ãªããããŒã¯ã®äœçœ®ïŒã«æ¯ã¹ãŠéåžžã«å°ãããããã«ãŒãã«è¿œå ããŠãäœãèµ·ãããªãå Žåã«ãã°ãçºçããŸããã€ãŸããå°ããæ°å€ã倧ããæ°å€ã«è¿œå ãããšãå°ããæ°å€ããå°ãããããå Žåã倧ããæ°å€ïŒæšæº/æãè¿ãã¢ãŒããžã®æ£åžžãªäžžãïŒã¯åãå€ã®ãŸãŸã«ãªããŸãã
ãã®ãããã«ãŒãã¯ç¡æéã«å®è¡ãããé åããã®ãµã€ãºã«å¶éããããŸã§ããã·ã¥ã³ãã³ããå®è¡ãããŸãããµã€ãºå¶éããªãå Žåãããã·ã¥ã³ãã³ãã¯ãã·ã³å šäœã®ã¡ã¢ãªããªããªããŸã§å®è¡ããç¶ããŸãããã£ããŒãåé¡ã¯è§£æ±ºããïŒ
ä¿®æ£ã¯éåžžã«ç°¡åã§ããããšã倿ããŸãã-ã§ããªãå Žåã¯ã°ãªããã©ãã«ã衚瀺ããªãã§ãã ããïŒ
if (firstMajorMark / majorMarkDistanceWorld > 1e15) return;

ç§ãè¡ã£ã倿Žã§ããããããšã§ãããç§ã®ãã°ä¿®æ£ã¯1è¡ã®ã³ãŒããš6è¡ã®ã³ã¡ã³ãã§æ§æãããŠããŸããã50è¡ã®iambicpentameterã³ãããããŒãã衚èšè¡šèšãããã³ããã°æçš¿ããªãã£ãããšã«é©ããã ãã§ããã¡ãã£ãšåŸ ã£ãŠãã ãã...
æ®å¿µãªãããåŒã³åºãã¹ã¿ãã¯ã®æžã蟌ã¿ã«ã¡ã¢ãªãå¿ èŠãªãããOOMã¯ã©ãã·ã¥ã§ã¯JavaScriptã¹ã¿ãã¯ãã¬ãŒã ã衚瀺ãããŸãããããã¯ããã®æ®µéã§ã¯å®å šã§ã¯ãªãããšãæå³ããŸããOOMã¹ã¿ãã¯ãã¬ãŒã ãå®å šã«åé€ããã仿¥ããã®ãã°ãã©ã®ããã«èª¿æ»ãããã¯ããããããŸããããæ¹æ³ã¯èŠã€ãããšç¢ºä¿¡ããŠããŸãã
ãããã£ãŠãéåžžã«å€§ããªæ°å€ã䜿çšããããšããŠããJavaScriptéçºè ãæå€§ã®æŽæ°å€ã䜿çšããããšããŠãããã¹ãã©ã€ã¿ãŒããŸãã¯ç¡å¶éã®ãºãŒã ã§UIãå®è£ ããŠããå Žåã¯ãæµ®åå°æ°ç¹æŒç®ã®å¢çã«è¿ã¥ããšããããã®å¢çãå£ããå¯èœæ§ãããããšãèŠããŠããããšãéèŠã§ãã
åºå
éçºãµãŒããŒã¯Vdsinaã®åäºè©©ã§ãã
Intelã®éåžžã«é«éãªNVMeãã©ã€ãã䜿çšããŠãããããŒããŠã§ã¢ãç¯çŽããããšã¯ãããŸããããã©ã³ãåãããæ©åšãšåžå Žã§æãææ°ã®ãœãªã¥ãŒã·ã§ã³ã®ã¿ã§ãã
