-
1 # 玉渡山海釣
-
2 # 大有—上吉
自己寫的程式,自己執行不對,拿給客戶執行卻是對的?只說明一個問題,程式得到的輸入值或設定的環境值不符合執行要求。
-
3 # 海盜八號
你問我怎麼回事我怎麼知道 你說不對到底哪裡不對都沒說清楚怎麼答。
單純就執行結果不一致而言,那也太多原因了:
1.應用程式編碼不規範。
2.程式所依賴的作業系統,外部介面、環境變數、輸入資料不一致
3.呼叫了非標量函式
以上僅僅是個別例子,目測你還是線下找個人幫你審查下程式碼吧。
-
4 # 密密麻麻剛剛結束
我也遇到過,程式執行不透過,檢查不出問題,最後在別的機器上執行沒問題。你可以多試幾臺電腦,如果其他電腦都沒問題,只有你的電腦有問題,那基本可以排除程式的原因,問題應該出在你的電腦上。
-
5 # BWanger軟體開發達人
這很正常。我做軟體開發工作大致三十多年了,以下給你一些示例。
不同的品牌的電腦,在雙精度double的浮點數學運算上稍有差異。
2005年,我在做數控的軌跡計算時,把編繹連結好的APP發行版(released)複製到幾臺IPC上。當時選了幾款IPC工控機,一個用的是INTEL的CPU,一個用的是AMD的CPU。當時的作業系統用的都是Win XP sp3。
在INTEL IPC上,執行正常。在AMD IPC上總是出問題,直線與圓弧總是顯示沒交點。後來,軟體跟蹤,發現直線一園弧相切的的一個誤差計算上,二者存在差異,Intel的誤差結果是0.00003,而AMD的是0.00008,軟體定義的判斷閥值是0.00005。
當時覺得不可思意,但結果就是這樣。只能更改判斷閥值,為保險期間,設為0.0001。以後所有裝置執行,均正常。
我們可以用雙精度做一些簡單的加、減、乘、除、開方運算,同樣的算式,同樣的程式,在不同電腦上,運算結果是絕對有差異的。我們平時沒有察覺到,是因為我們取的精度比較低。在高精尖的裝置上,都很在意計算精度的處理。
不同品牌的電腦,處理與其它裝置通訊的速度也有差異,而且還很大,比如序列通訊。
做自動控制的人,經常要在不同電腦間進行通訊程式的軟體開發。
比如,在A、B、C三臺電腦上進行串列埠通訊測試。通訊設定都一樣,一個停止位,無奇偶校驗位,波特率115200bps。你會發現,在A,B兩臺電腦上做好的通訊程式,在A、C電腦上執行時總是發生傳輸錯誤。
為什麼會這樣?這就是波特率計算誤差問題。不同頻率的電腦,計算所得的實際傳輸速率是有差異的,一個是115196bps,另一個可能是115236bps。
如何處理才能保證無虞?一是控制傳輸定時器的頻率,二是增加傳輸資料楨檢驗。把不正確的去除掉。
總結:同樣的程式,在不同電腦上執行結果不一樣,這很正常,關鍵在於軟體處理方法。產生的原因也非常多,與硬體的CPU有關,與作業系統有關,與使用的IDE開發工具有關。
對於整數之間的運算,計算機是相當精準的,一般不會有差異,但對於有協處理器參與的浮點運算,尤其是高精度的浮點運算,差異還是有的,所以ZERO閥值的設定顯得尤為重要,能顯示程式設計師的程式設計功力。
-
6 # TonyDeng
這個問題顛倒了。正常的情況應該是在自己的電腦上執行對,在別人電腦上執行不對。程式是自己設計編寫的,起碼要在自己電腦上執行對了才會發給別人,哪有自己看都不對還發出去的事。電腦個體不同的確很正常,這是程式設計師除錯、測試程式最常見的過程,但首先要在自己的電腦環境中“正常”才說得上釋出。
回覆列表
你這個資訊太少了,只能猜測一下,具體你應該debug一下才能找到根本原因。第一種需要確定程式邏輯有沒有問題。如果邏輯有問題,在不同的輸入引數的影響下,可能會有不同的結果。在別人電腦呈現結果就是你預期的結果,所以你認為程式執行正確;而另一邊在自己電腦出現的未預期的結果,你認為是執行錯誤。這需要你自己去嚴格的檢查一下程式碼,除錯看看執行時的程式的偏差在哪裡出現的。第二種執行時環境不同。你的程式應該有使用了系統的一些執行時庫,而這些庫在兩臺裝置上可能版本並不完全一致,你呼叫的外部方法或者函式,在兩個不同的環境的執行時庫檔案裡返回的結果有差異,而且恰好導致一個符合預期,另外一個不符合預期。
總得來講不管哪一種情況,都需要去除錯追蹤一下每一步執行的結果,看看兩邊差異是在哪一步出現的。如果別人電腦無法安裝開發環境那麼就編譯一個除錯版本,並且在每一個關鍵步驟打印出來相關的變數內容,這樣來對比一下,一邊尋找差異出現的位置。