在this question中,OP試圖隔離大程序中難以捉摸的錯誤。他觀察了一些double
值,然後嘗試將它們作爲輸入硬編碼到較小的測試程序。 ideea非常適合隔離這樣的bug。將精確表示分配給浮點值
但是所選擇的方法違反了字符串別名規則,引入UB,從而所述測試是完全不可靠:
手錶的調試器的表達式:
+------------------------+----------------------| | Watch Expression | Value | +------------------------+----------------------| | *(long long int *)(&a) | 4594681439063077250 | +------------------------+----------------------|
和然後將其指定在測試程序:
double a; *(long long int *)(&a) = 4594681439063077250;
(我強烈懷疑)他這樣做是爲了一點一點地保留確切的double
值。
問題:如何在調試會話中觀察到如何將雙精度值分配給位 - ?
爲什麼你的意思是「一點一滴」。數字是一個數字,如果你知道數字並知道表示格式,那麼你知道它的表示形式。 –
您的調試工具是否允許您查看變量中的實際位,或僅顯示十進制表示? – Beta
您已經回答說這引入_undefined behavior_。我懷疑沒有實際引入_UB_的方法。 – user0042