r*********n 发帖数: 4553 | 1 to compute e.g. 0.5 * 1.5? |
r*********n 发帖数: 4553 | 2 顶一下....
要是两个integer乘法,loop用加法就行了,但是floating number怎么搞呢?面官甚至
提示:你想想人们在还没有发明计算器之前是怎么做乘法的... |
z****p 发帖数: 18 | 3
My guess:
Exponents can be added directly, and mantissas can be multiplied using "two
integer multiplication".
http://en.wikipedia.org/wiki/Floating_point
【在 r*********n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 顶一下.... : 要是两个integer乘法,loop用加法就行了,但是floating number怎么搞呢?面官甚至 : 提示:你想想人们在还没有发明计算器之前是怎么做乘法的...
|
w********p 发帖数: 948 | 4 1。 先数一共两个小数点,
2。 15 *5 (用加分做 15+ 15+。。。)
3。 然后 再移位, (指小数点移位)
不让移位的话, 就加 75次 0.01
这个行吗?
【在 r*********n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : to compute e.g. 0.5 * 1.5?
|
r**h 发帖数: 1288 | 5 不行吧
float类型,1位符号位,8位指数位,23位精度。
要精确的话,应该是要把这23位全取出来,然后做两个23位的大数乘法。就算用long
long可以不溢出,意义也不是很大
所以我觉得这个问题没什么意义,个人意见
【在 w********p 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 1。 先数一共两个小数点, : 2。 15 *5 (用加分做 15+ 15+。。。) : 3。 然后 再移位, (指小数点移位) : 不让移位的话, 就加 75次 0.01 : 这个行吗?
|
z****p 发帖数: 18 | 6
two
I was almost right: I missed the "normalization" step:
http://en.wikipedia.org/wiki/Floating_point#Multiplication_and_
【在 z****p 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : My guess: : Exponents can be added directly, and mantissas can be multiplied using "two : integer multiplication". : http://en.wikipedia.org/wiki/Floating_point
|
w********p 发帖数: 948 | 7 谢谢分享link.
【在 z****p 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : two : I was almost right: I missed the "normalization" step: : http://en.wikipedia.org/wiki/Floating_point#Multiplication_and_
|
w********p 发帖数: 948 | 8 lz 的问题是 0.5 * 1.5
0.5 可能会是 0。499999999999999999
但是我们计算的时候根本,不用考虑这些。
想想。笔算是怎么做乘法的。 15 * 5 然后 e -2 好了。然后改咋调整,再调就
是了。
【在 r**h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 不行吧 : float类型,1位符号位,8位指数位,23位精度。 : 要精确的话,应该是要把这23位全取出来,然后做两个23位的大数乘法。就算用long : long可以不溢出,意义也不是很大 : 所以我觉得这个问题没什么意义,个人意见
|
|
r*********n 发帖数: 4553 | 9 我面试的时候就是说转化为int,然后loop,但是说完之后面官没有反应,然后我就凌
乱了....
另外,给一个float,怎么数小数点呢?
还有如果是转化为int来做,我觉得并不见得会快,比如
3.1415926 * 3.1415927
太多有效位了,这个loop应该非常慢吧 |
y****n 发帖数: 743 | 10 我可能会这样做,不知道有没有更好的方法。
循环累加建立9x9乘法表
转化成字符串,删除小数点
两重循环,位于位相乘,累加结果,处理进位
结果转换成字符串,回填小数点,再转换换成float |
r******l 发帖数: 10760 | 11 a乘b的话当然不能loop b次累加a了,那得多慢啊?弄个数组存好九九表,然后模拟竖
式运算。
【在 r*********n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 顶一下.... : 要是两个integer乘法,loop用加法就行了,但是floating number怎么搞呢?面官甚至 : 提示:你想想人们在还没有发明计算器之前是怎么做乘法的...
|