2012-03-08 105 views
2

我的問題很簡單:我可以做2 * 10移位和加法移位(2 << 2) + 2但我不知道如何獲得2.2 * 10移位和加法。任何建議將非常感激。浮點數mul(* 10)添加和移位

-khan_gl

+0

或浮動,因爲我認爲,你可以簡單地說。浮點數的二進制表示是一個標準的噩夢。如果你可以處理定點數字,那很簡單。 – 2012-03-08 04:36:22

+0

有點相關:http://stackoverflow.com/questions/7720668/fast-multiplication-division-by-2-for-floats-and-doubles-cc – Mysticial 2012-03-08 04:50:28

+0

@BLUEPIXY:'(x << 3)+(x < <2)'是'x * 12',而不是'x * 012'。 – 2012-03-08 08:43:53

回答

2

這工作:

2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + (0 << 1)

開玩笑不談,你不能因爲你不能在C++/C轉向浮動。那麼,你可以(通過討厭的類型雙關),但然後你進入未定義的行爲。

另外,這樣做沒有意義。如果您正在進行乘法運算,那麼只需使用*。編譯器會將其轉換爲最有效的形式。

+0

什麼是'0 << 1'?我不認爲它是UB,標準需要移位操作符的整數操作數。 – 2012-03-08 04:47:51

+0

該OP想要轉變......所以... – Mysticial 2012-03-08 04:49:43

+0

@亞歷克汗希望在那裏轉變,所以我遵守;)UB來自將浮點數轉換爲int來執行轉換。 – Pubby 2012-03-08 04:50:08

1

如果我理解您的問題在所有,

2.2 = 2 + 2/10

因此,2.2 * 10 = 2×10 + 2 */10 = 2×10 + 2 = 22 。

你可以用shift和subtractions做分割。