iOS中Swift实现4位整数的反对数计算问题
解决Swift中计算反对数得到无穷大的问题
嘿,我一眼就看出问题出在哪了——你计算反对数的时候用错指数啦!
先理清楚反对数的核心逻辑:如果我们得到一个对数结果 y = log₁₀(x),那x就是y的反对数,也就是 x = pow(10, y)。你说反对数表得到3977,这对应的其实是对数为0.5995时的反对数(因为10^0.5995≈3.977,要是加上首数3的话就是3977),而不是直接拿5995当指数去算10的5995次方——那数字大到Double类型根本装不下,自然会返回无穷大。
看看你代码里的问题:
- LOG代码是计算
log10(5995.0),得到的结果大概是3.7778,这是5995的常用对数,逻辑没问题。 - 但ANTI LOG代码直接把原始数字
5995.0代入pow(10, number),这完全搞反了运算对象!
正确的实现方式
如果你是想得到反对数表中的3977,代码应该这样写:
// 这里的logValue是你已知的对数值,比如0.5995(对应尾数部分) let logValue = 0.5995 let antilog = pow(10, logValue) print("antilog ", antilog) // 输出约3.977,要是需要3977的话,就用pow(10, 3 + 0.5995),也就是1000*3.977≈3977
如果你是想验证对数和反对数的互逆性(即5995的对数的反对数还是5995),那代码应该改成这样:
let number = 5995.0 let logOfNumber = log10(number) let antilog = pow(10, logOfNumber) print("antilog ", antilog) // 输出约5995.0,符合对数和反对数的互逆逻辑
说白了,你之前的ANTI LOG代码错误地用原始数字当指数,正确的做法应该用对数运算的结果作为指数。10的5995次方远远超出了浮点数的表示范围,所以才会得到无穷大的结果。
内容的提问来源于stack exchange,提问作者ssowri1
相关产品推荐
相关产品推荐

