程中,在對某一向量進行歸一化時,經(jīng)常需要做上圖中的運算, 翻譯為代碼就是:
y=1.0 / sqrt(x);
平方根倒數(shù)速算法(Fast Inverse Square Root)是一種用于快速計算逆平方根的算法。
其原理是將先將浮點數(shù)當(dāng)作整數(shù)位移,再與神奇數(shù)字(0x5f3759df)做減法,這樣得到的浮點數(shù)結(jié)果即是對輸入數(shù)字的平方根倒數(shù)的粗略估計值,最后再進行一次牛頓迭代法,以使之更精確。
該算法最早來源于一款雷神之錘3的游戲,據(jù)說比用sqrt()函數(shù)的效率要高四倍,但我實際測試下來卻發(fā)現(xiàn)并非如此,兩者的耗時非常接近,可能和不同的硬件、編譯器、sqrt()庫函數(shù)的實現(xiàn)相關(guān),附上測試源碼如下:
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <stdint.h>
float FastInvSqrt(float number)
{
const float half=number * 0.5F;
union {
float f;
uint32_t i;
} conv={.f=number};
conv.i=0x5f3759df - (conv.i >> 1);
conv.f *=1.5F - (half * conv.f * conv.f);
return conv.f;
}
int main()
{
clock_t clock1, clock2;
float x, result, t1, t2;
// 1.0 / sqrt()
clock1=clock();
x=0.0;
while (x < 10000.0) {
x +=0.001;
result=1.0 / sqrt(x);
}
clock2=clock();
t1=(float)(clock2 - clock1) / (CLOCKS_PER_SEC) * 1000;
printf("1.0 / sqrt(x) : %f ms\n", t1);
// FastInvSqrt()
clock1=clock();
x=0.0;
while (x < 10000.0) {
x +=0.001;
result=FastInvSqrt(x);
}
clock2=clock();
t2=(float)(clock2 - clock1) / (CLOCKS_PER_SEC) * 1000;
printf("FastInvSqrt(x) : %f ms\n", t2);
return 0;
}
本地電腦的測試結(jié)果如下:
于兩點,我們一般會對馬上要發(fā)生的事情進行一個準(zhǔn)確的時間預(yù)測:一是根據(jù)過往經(jīng)驗,主要針對非周期性事件(如綠燈前一秒時腳已經(jīng)放在了油門上);二是根據(jù)節(jié)奏,針對周期性事件(如鋼琴演奏時手腳的完美配合)。這兩者對我們感知和享受世界的能力都至關(guān)重要。近日,科學(xué)家發(fā)現(xiàn)它們分別由大腦兩個不同機制來調(diào)解的。
Credit: ? spaxiax / Fotolia
當(dāng)我們在運動、演講、音樂表演甚至是分配注意力時,需要時間定向(temporal orientation,個體對當(dāng)前的時間狀況的認知)來輔助我們?nèi)缙谕瓿扇蝿?wù)。然而,每天要做的事情這么煩雜,究竟大腦是如何分配神經(jīng)網(wǎng)絡(luò)來支持我們對每件事情的計時的呢?
先前研究已證實,基底神經(jīng)節(jié)(大腦皮層下一大塊灰質(zhì)的總稱)和小腦與運動調(diào)節(jié)和時間加工有關(guān),但這些皮層下結(jié)構(gòu)在注意力時間定向中的作用尚不清楚。
為了弄清這一點,在題為“Double dissociation of single-interval and rhythmic temporal prediction in cerebellar degeneration and Parkinson’s disease”的這項新研究中,主要作者Assaf Breska 和Richard Ivry研究了帕金森病患者和小腦退化患者利用時間線索來集中注意力的情況。
之所以選擇帕金森患者為實驗對象,是因為帕金森患者的震顫麻痹癥狀是基底神經(jīng)節(jié)損害的主要臨床表現(xiàn)之一。
研究人員假設(shè),如果基底神經(jīng)節(jié)和小腦中的其中一個“神經(jīng)時鐘”失靈,另一個理論上可以介入。
接下來,研究人員讓兩組患者分別集中注意力觀看兩組以不同速度在電腦屏幕上滾動的紅、白、綠三色方塊的順序,然后讓他們在綠色方塊出現(xiàn)時立即按動按鈕,并提示他們,白色方塊之后就會出現(xiàn)綠色方塊。
其中一組的紅色、白色和綠色方塊遵循穩(wěn)定的節(jié)奏滾動,已知小腦變性患者對這些節(jié)奏線索反應(yīng)良好;另一組中,紅色方塊和綠色方塊之間的時間間隔被設(shè)置為不規(guī)律模式,這種順序?qū)ε两鹕习Y患者來說更容易遵循,并且成功率更高。
DOI:https://doi.org/10.1073/pnas.1810596115
結(jié)果顯示,小腦退化患者在使用非節(jié)奏性時間線索方面存在障礙,而與帕金森病相關(guān)的基底神經(jīng)節(jié)退化患者在使用節(jié)奏性線索方面存在障礙。
也就是說,我們的大腦的確在使用至少兩種不同的機制來預(yù)測時間,這一結(jié)果挑戰(zhàn)了人們普遍認為的單一大腦系統(tǒng)處理所有時間需求的理論。
Ivry補充說,基于節(jié)奏的大腦系統(tǒng)對周期性事件更敏感,如語音和音樂中固有的節(jié)奏;而區(qū)間隨機混雜系統(tǒng)(interval system)則提供了更普遍的預(yù)期能力,即使在沒有節(jié)奏信號的情況下,大腦對時間規(guī)律依舊敏感。
總體而言,這些大腦系統(tǒng)合在一起,不僅能讓我們在當(dāng)下生存,還能讓我們積極預(yù)測未來;此外,這一發(fā)現(xiàn)的意義還在于,確定了這些神經(jīng)系統(tǒng)患者可能會產(chǎn)生認知障礙的預(yù)期環(huán)境以及無困難的環(huán)境后,研究人員還可以通過改變環(huán)境讓他們在面對癥狀時更容易與這個世界互動。
責(zé)編:浮蘇
茫茫微信公眾號中相遇不容易,星標(biāo)☆生物探索,不要和探索君走散喲!
End
參考資料:1)To predict the future, the brain uses two clocks
2)Double dissociation of single-interval and rhythmic temporal prediction in cerebellar degeneration and Parkinson’s disease
個人的電腦中都會安裝很多軟件,可能還保留著很多不為人知的冷門軟件。不過雖然冷門,但絕不意味著低能,相反很多冷門軟件的功能十分出色。閑話少說,接下來我就給大家推薦5款冷門小工具,看一看有沒有你喜歡的。
TicKeys是一款鍵盤輔助工具,它能夠通過聲音反饋提升打字體驗。每次按鍵都會發(fā)出特定的聲音,用戶可以根據(jù)聲音來調(diào)整打字節(jié)奏,從而提高打字速度和準(zhǔn)確性。TicKeys支持多種聲音主題,適合不同用戶的個性化需求。
.Clocks是一款時間管理應(yīng)用,它允許用戶在多個時區(qū)中設(shè)置和查看不同城市的時間。這對于需要跨時區(qū)工作或聯(lián)系的用戶非常有用。.Clocks界面簡潔,操作直觀,可以快速添加和比較不同地區(qū)的時間。
如果你想要知道全球200多個國家和地區(qū)的手機號碼中哪些有微信,燃精靈是你的好助手。燃精靈是一款優(yōu)秀的微信空號檢測軟件,讓你只需將號碼段導(dǎo)入云端,就能過濾出有微信的號碼,從而準(zhǔn)確抓住潛在客戶。搜索燃精靈,填寫推薦碼6666即可使用,飛機@RJL8888。
Malwarebytes是一款廣受歡迎的惡意軟件防護軟件,它提供實時保護,能夠檢測和阻止病毒、間諜軟件、勒索軟件等多種威脅。Malwarebytes的掃描速度快,消耗資源少,用戶界面友好,適合各類用戶保護個人電腦安全。
iPhotoDraw是一款圖片標(biāo)注軟件,可以在圖片上添加文字、符號、尺寸、放大細節(jié)等注釋對象,增加圖片的信息量和表現(xiàn)力。iPhotoDraw不會修改原始圖片,而是將注釋保存在一個單獨的文件中,保持原始圖片的完整性。iPhotoDraw的操作簡單易用,注釋的設(shè)置也很詳細,適合一般的圖片標(biāo)注需求。
其實類似這樣的冷門小軟件還有很多,絕大多數(shù)都有不大的體積和強悍的功能,喜歡的小伙伴可以多多點贊。