i*****d 发帖数: 962 | 1 给定一个很大很大的数(string)和一个除数(int),给这个大数做除法,返回的结果是
double类型。我的想法是从第一个数字开始读,不够除的话就继续读下一位,然后把余
数加给后面,读完的话就加小数点,余数*10继续运算。但是想不明白怎么去判断结果
已经超过double的精度?要是这个是除不尽的话,在什么情况下终止计算? |
y**********u 发帖数: 2839 | |
i*****d 发帖数: 962 | 3
可以assume是吧。爱你
【在 y**********u 的大作中提到】 : java biginteger?
|
B********r 发帖数: 2 | 4 Assuming the result is within the double range. Then, there's no need to
consider double precision. You handle it as if doing the integer division to
get quotient and reminder. and the reminder divided by deviser can be done
using "/" operator. so assign quotient+(reminder/deviser) to a double, you
are done. Of course, you want to be sure your quotient is within the range
of double.
If the result is guaranteed within the double range, you have to check as
you do long division and error out as soon as you result is beyond double
range.
【在 i*****d 的大作中提到】 : 给定一个很大很大的数(string)和一个除数(int),给这个大数做除法,返回的结果是 : double类型。我的想法是从第一个数字开始读,不够除的话就继续读下一位,然后把余 : 数加给后面,读完的话就加小数点,余数*10继续运算。但是想不明白怎么去判断结果 : 已经超过double的精度?要是这个是除不尽的话,在什么情况下终止计算?
|
z*********n 发帖数: 1451 | 5 double 精度是16位有效数字,算出来16位有效数字了就可以了。
或者保险点,多算几位,转double,肯定够了。
面试不可能考察这个点吧。你能把你说的那部分做出来应该就过了。
还有一个实在没办法的办法(假设不知道你的语言里double到底精度多少,也查不到)。
就是把你每轮结果都转一个double出来,然后比较相邻两轮的double结果是否有变化。
如果没变化说明你继续往下算不会影响最终的double了,可以终止循环。 |
z*********n 发帖数: 1451 | 6
to
done
这位的没看懂,如果您的“deviser”不在double 范围内,你reminder/“deviser”
如何用"/" operator呢?不还得继续用string做?那不和lz说的本质一样?但你依然需
要考虑何时终止循环,也就是double精度的问题?我理解错了吗?
【在 B********r 的大作中提到】 : Assuming the result is within the double range. Then, there's no need to : consider double precision. You handle it as if doing the integer division to : get quotient and reminder. and the reminder divided by deviser can be done : using "/" operator. so assign quotient+(reminder/deviser) to a double, you : are done. Of course, you want to be sure your quotient is within the range : of double. : If the result is guaranteed within the double range, you have to check as : you do long division and error out as soon as you result is beyond double : range.
|
y**********u 发帖数: 2839 | 7 还是精肛兄厉害,有日子没来了,thanksgiving出去哈皮了吧
吼吼吼
)。
【在 z*********n 的大作中提到】 : double 精度是16位有效数字,算出来16位有效数字了就可以了。 : 或者保险点,多算几位,转double,肯定够了。 : 面试不可能考察这个点吧。你能把你说的那部分做出来应该就过了。 : 还有一个实在没办法的办法(假设不知道你的语言里double到底精度多少,也查不到)。 : 就是把你每轮结果都转一个double出来,然后比较相邻两轮的double结果是否有变化。 : 如果没变化说明你继续往下算不会影响最终的double了,可以终止循环。
|