簡體   English   中英

截斷數字的最后X位而不除以10eX

[英]Truncate last X digits of number without division by 10eX

我正在制作一個阻塞算法,但我剛剛意識到,要保持這種精度,將超時添加到這種算法並不容易。
添加超時意味着阻塞算法應該在X ms之后中止(如果不是更早的話)。 現在,我似乎有兩個選擇:

  1. 迭代時間(有錯誤,但是很快)
    • 檢查阻塞狀況
    • time_elapsed迭代1(這意味着使用usleep 1e-6秒)
    • 比較time_elapsedtimeout 這是我要談論的問題
    • usleep(1)
  2. 每次迭代獲取系統時間(緩慢但精確)
    • 知道該怎么做 ,請不要發布任何答案。

Compating timeouttime_elapsed

這就是困擾我的地方。 timeout將以毫秒(10e-3)為單位,而usleep睡眠10e-6秒。 所以我的time_elapsed將比timeout精確1000倍。 我想截斷 time_elapsed后三位數字(等於floor($time_elapsed/1000)而不進行除法。除法算法太慢。

摘要

我想將變量縮小1000倍而不用1000除。我只想擺脫數據。 在二進制中,我將使用移位運算符,但不知道如何將其應用於十進制系統。

代碼示例:

有時,當使用SO的人無法回答理論問題時,他們真的渴望代碼。 這里是:

floor($time_elapsed/1000);

我想用更快的速度替換此代碼。 請注意,盡管問題本身充滿了超時,但問題標題僅與截斷該數據有關 其他用戶可能會發現該解決方案除計時外還可以用於其他目的。

也許這將有助於Php號碼格式 盡管這確實會導致四舍五入,但是如果這不能接受,那么我認為這是不可能的,因為PHP的類型很松散,您無法以特定的精度級別定義數字。

嘗試這個:

(int)($time_elapsed*0.001)

這應該快很多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM