精华内容
下载资源
问答
  • 对于赋值,我们被要求创建一个返回反函数的函数.基本问题是从平方函数创建平方根函数.我想出了一个使用二进制搜索的解决方案和另一个使用牛顿方法的解决方案.我的解决方案似乎适用于cube-root和square-root,但不适用...

    对于赋值,我们被要求创建一个返回反函数的函数.基本问题是从平方函数创建平方根函数.我想出了一个使用二进制搜索的解决方案和另一个使用牛顿方法的解决方案.我的解决方案似乎适用于cube-root和square-root,但不适用于log10.这是我的解决方案:

    #Binary Search

    def inverse1(f, delta=1e-8):

    """Given a function y = f(x) that is a monotonically increasing function on

    non-negative numbers, return the function x = f_1(y) that is an approximate

    inverse, picking the closest value to the inverse, within delta."""

    def f_1(y):

    low, high = 0, float(y)

    last, mid = 0, high/2

    while abs(mid-last) > delta:

    if f(mid) < y:

    low = mid

    else:

    high = mid

    last, mid = mid, (low + high)/2

    return mid

    return f_1

    #Newton's Method

    def inverse(f, delta=1e-5):

    """Given a function y = f(x) that is a monotonically increasing function on

    non-negative numbers, return the function x = f_1(y) that is an approximate

    inverse, picking the closest value to the inverse, within delta."""

    def derivative(func): return lambda y: (func(y+delta) - func(y)) / delta

    def root(y): return lambda x: f(x) - y

    def newton(y, iters=15):

    guess = float(y)/2

    rootfunc = root(y)

    derifunc = derivative(rootfunc)

    for _ in range(iters):

    guess = guess - (rootfunc(guess)/derifunc(guess))

    return guess

    return newton

    无论使用哪种方法,当我在教授的测试函数中得到log10()的输入n = 10000时,我得到这个错误:(例外:当我使用牛顿的方法函数时,log10()是关闭的,而这二进制搜索方法相对准确,直到达到输入阈值,无论哪种方式,两个解决方案在n = 10000时抛出此错误)

    2: sqrt = 1.4142136 ( 1.4142136 actual); 0.0000 diff; ok

    2: log = 0.3010300 ( 0.3010300 actual); 0.0000 diff; ok

    2: cbrt = 1.2599211 ( 1.2599210 actual); 0.0000 diff; ok

    4: sqrt = 2.0000000 ( 2.0000000 actual); 0.0000 diff; ok

    4: log = 0.6020600 ( 0.6020600 actual); 0.0000 diff; ok

    4: cbrt = 1.5874011 ( 1.5874011 actual); 0.0000 diff; ok

    6: sqrt = 2.4494897 ( 2.4494897 actual); 0.0000 diff; ok

    6: log = 0.7781513 ( 0.7781513 actual); 0.0000 diff; ok

    6: cbrt = 1.8171206 ( 1.8171206 actual); 0.0000 diff; ok

    8: sqrt = 2.8284271 ( 2.8284271 actual); 0.0000 diff; ok

    8: log = 0.9030900 ( 0.9030900 actual); 0.0000 diff; ok

    8: cbrt = 2.0000000 ( 2.0000000 actual); 0.0000 diff; ok

    10: sqrt = 3.1622777 ( 3.1622777 actual); 0.0000 diff; ok

    10: log = 1.0000000 ( 1.0000000 actual); 0.0000 diff; ok

    10: cbrt = 2.1544347 ( 2.1544347 actual); 0.0000 diff; ok

    99: sqrt = 9.9498744 ( 9.9498744 actual); 0.0000 diff; ok

    99: log = 1.9956352 ( 1.9956352 actual); 0.0000 diff; ok

    99: cbrt = 4.6260650 ( 4.6260650 actual); 0.0000 diff; ok

    100: sqrt = 10.0000000 ( 10.0000000 actual); 0.0000 diff; ok

    100: log = 2.0000000 ( 2.0000000 actual); 0.0000 diff; ok

    100: cbrt = 4.6415888 ( 4.6415888 actual); 0.0000 diff; ok

    101: sqrt = 10.0498756 ( 10.0498756 actual); 0.0000 diff; ok

    101: log = 2.0043214 ( 2.0043214 actual); 0.0000 diff; ok

    101: cbrt = 4.6570095 ( 4.6570095 actual); 0.0000 diff; ok

    1000: sqrt = 31.6227766 ( 31.6227766 actual); 0.0000 diff; ok

    Traceback (most recent call last):

    File "/CS212/Unit3HW.py", line 296, in

    print test()

    File "/CS212/Unit3HW.py", line 286, in test

    test1(n, 'log', log10(n), math.log10(n))

    File "/CS212/Unit3HW.py", line 237, in f_1

    if f(mid) < y:

    File "/CS212/Unit3HW.py", line 270, in power10

    def power10(x): return 10**x

    OverflowError: (34, 'Result too large')

    这是测试功能:

    def test():

    import math

    nums = [2,4,6,8,10,99,100,101,1000,10000, 20000, 40000, 100000000]

    for n in nums:

    test1(n, 'sqrt', sqrt(n), math.sqrt(n))

    test1(n, 'log', log10(n), math.log10(n))

    test1(n, 'cbrt', cbrt(n), n**(1./3.))

    def test1(n, name, value, expected):

    diff = abs(value - expected)

    print '%6g: %s = %13.7f (%13.7f actual); %.4f diff; %s' %(

    n, name, value, expected, diff,

    ('ok' if diff < .002 else '**** BAD ****'))

    这些是测试的设置方式:

    #Using inverse() or inverse1() depending on desired method

    def power10(x): return 10**x

    def square(x): return x*x

    log10 = inverse(power10)

    def cube(x): return x*x*x

    sqrt = inverse(square)

    cbrt = inverse(cube)

    print test()

    发布的其他解决方案在运行全套测试输入时似乎没有问题(我试图不查看已发布的解决方案).对这个错误的任何见解?

    似乎共识是数字的大小,但是,我教授的代码似乎适用于所有情况:

    #Prof's code:

    def inverse2(f, delta=1/1024.):

    def f_1(y):

    lo, hi = find_bounds(f, y)

    return binary_search(f, y, lo, hi, delta)

    return f_1

    def find_bounds(f, y):

    x = 1

    while f(x) < y:

    x = x * 2

    lo = 0 if (x ==1) else x/2

    return lo, x

    def binary_search(f, y, lo, hi, delta):

    while lo <= hi:

    x = (lo + hi) / 2

    if f(x) < y:

    lo = x + delta

    elif f(x) > y:

    hi = x - delta

    else:

    return x;

    return hi if (f(hi) - y < y - f(lo)) else lo

    log10 = inverse2(power10)

    sqrt = inverse2(square)

    cbrt = inverse2(cube)

    print test()

    结果:

    2: sqrt = 1.4134903 ( 1.4142136 actual); 0.0007 diff; ok

    2: log = 0.3000984 ( 0.3010300 actual); 0.0009 diff; ok

    2: cbrt = 1.2590427 ( 1.2599210 actual); 0.0009 diff; ok

    4: sqrt = 2.0009756 ( 2.0000000 actual); 0.0010 diff; ok

    4: log = 0.6011734 ( 0.6020600 actual); 0.0009 diff; ok

    4: cbrt = 1.5865107 ( 1.5874011 actual); 0.0009 diff; ok

    6: sqrt = 2.4486818 ( 2.4494897 actual); 0.0008 diff; ok

    6: log = 0.7790794 ( 0.7781513 actual); 0.0009 diff; ok

    6: cbrt = 1.8162270 ( 1.8171206 actual); 0.0009 diff; ok

    8: sqrt = 2.8289337 ( 2.8284271 actual); 0.0005 diff; ok

    8: log = 0.9022484 ( 0.9030900 actual); 0.0008 diff; ok

    8: cbrt = 2.0009756 ( 2.0000000 actual); 0.0010 diff; ok

    10: sqrt = 3.1632442 ( 3.1622777 actual); 0.0010 diff; ok

    10: log = 1.0009756 ( 1.0000000 actual); 0.0010 diff; ok

    10: cbrt = 2.1534719 ( 2.1544347 actual); 0.0010 diff; ok

    99: sqrt = 9.9506714 ( 9.9498744 actual); 0.0008 diff; ok

    99: log = 1.9951124 ( 1.9956352 actual); 0.0005 diff; ok

    99: cbrt = 4.6253061 ( 4.6260650 actual); 0.0008 diff; ok

    100: sqrt = 10.0004883 ( 10.0000000 actual); 0.0005 diff; ok

    100: log = 2.0009756 ( 2.0000000 actual); 0.0010 diff; ok

    100: cbrt = 4.6409388 ( 4.6415888 actual); 0.0007 diff; ok

    101: sqrt = 10.0493288 ( 10.0498756 actual); 0.0005 diff; ok

    101: log = 2.0048876 ( 2.0043214 actual); 0.0006 diff; ok

    101: cbrt = 4.6575475 ( 4.6570095 actual); 0.0005 diff; ok

    1000: sqrt = 31.6220242 ( 31.6227766 actual); 0.0008 diff; ok

    1000: log = 3.0000000 ( 3.0000000 actual); 0.0000 diff; ok

    1000: cbrt = 10.0004883 ( 10.0000000 actual); 0.0005 diff; ok

    10000: sqrt = 99.9991455 ( 100.0000000 actual); 0.0009 diff; ok

    10000: log = 4.0009756 ( 4.0000000 actual); 0.0010 diff; ok

    10000: cbrt = 21.5436456 ( 21.5443469 actual); 0.0007 diff; ok

    20000: sqrt = 141.4220798 ( 141.4213562 actual); 0.0007 diff; ok

    20000: log = 4.3019052 ( 4.3010300 actual); 0.0009 diff; ok

    20000: cbrt = 27.1449150 ( 27.1441762 actual); 0.0007 diff; ok

    40000: sqrt = 199.9991455 ( 200.0000000 actual); 0.0009 diff; ok

    40000: log = 4.6028333 ( 4.6020600 actual); 0.0008 diff; ok

    40000: cbrt = 34.2003296 ( 34.1995189 actual); 0.0008 diff; ok

    1e+08: sqrt = 9999.9994545 (10000.0000000 actual); 0.0005 diff; ok

    1e+08: log = 8.0009761 ( 8.0000000 actual); 0.0010 diff; ok

    1e+08: cbrt = 464.1597912 ( 464.1588834 actual); 0.0009 diff; ok

    None

    展开全文
  • 程序员二进制计算器 v1.36

    热门讨论 2014-07-16 16:21:43
    专为程序员打造的计算器,二进制运算强大,支持64位。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 ...
  • ASCII及十六进制转换工具《建》

    热门讨论 2010-09-11 10:39:41
    (3)将二进制形式的子网掩码”; (4)将”后的子网掩码与IP地址做“与”运算,将答案化为十进制便得到主机地址。 通过上面的一段大家应该有所了解了,如果还不太明白可勾选“示范”来查看。 我把上面...
  • 1.abs()绝对值2.all()如果括号里所以数据为True就返回True,否则False;3.any()如果括号里任意一个数据为True,就返回True;则False;...5.bin()把一个整数十进制转换成二进制二进制代表:ob6.bool(...

    1.abs() 取绝对值

    2.all() 如果括号里所以数据为True 就返回True,否则False;

    3.any() 如果括号里任意一个数据为True,就返回True;反则False;

    4.ascii() ascii([1,2,"我们"]) 结果看起来是一个列表,实际上结果类型是str;

    把一个内存变成一个可打印的字符串形式。

    5.bin() 把一个整数十进制转换成二进制:二进制代表:ob

    6.bool() 判断True/False

    7.btyearray()   把一个字符串变成一个列表可以修改,打印和修改的内容是字符对应的ascii表里边的位置;

    例如:

    a = bytearray("abcde",encoding="utf-8")

    print (a[1])

    a[1] = 50

    print (a)

    8.bytes() 将一个字符转换成二进制格式

    9.callable() 判断括号里边参数可否被调用; print(callable([1,2,3])) 列表不可以被调用;函数可以被调用;

    10.chr()  输入整数返回ascii表对应的字符 chr(97) 输出a;ord()是相反的ord(a)

    11.classmethod

    12.compile() 用于将python代码编译成源代码的意思

    例如:

    c = for i in range(10);print (i)

    c = compile(code,"","exec")     #exec:代表可执行代码

    exec(c)     #执行代码

    修正::::::::::::::::::;

    13.complex() 负数

    14.delattr() 关于面向对象的

    15.dir() 查看参数有什么方法

    16.divmod() 返回商和余数;divmod(5,2)

    17.enumerate()

    18.eval()   把字符串转成字典,有for循环、语句之类的要用exec

    19.exec()

    20.filter()

    匿名函数:

    #函数就用一次,用完就删除

    def a(n):

    print(n)

    a(5)

    #用匿名函数写成如下:

    a2 = lambda n :print(n)

    a2(6)

    #匿名函数只能处理简单的print或者计算,复杂的就不行了,如:

    def b(n):

    print(n)

    for i in range(n):

    print(n)

    #filter() 过滤想要的打印出来

    #如:

    res = filter(lambda n:n>5 ,range(10))   #res是一个迭代器,把大于5的全部打印出来。

    print(res)

    for i in res:

    print(i)

    21.map() 把后边的值放到前边的数据里来处理,再接着运行;

    res = map(lambda n:n*2,range(10))

    #相当于[i*2 for i in range(10)]

    #也可以写成:[lambda i:i*2 for i in range(10)]

    for i in res:

    print(i)

    22.reduce() 累加运算

    import functools

    res = functools.reduce(lambda x,y: x+y,range(10))

    #x默认是0  y是1 ,处理x+y 将值赋值给x ,再循环第二次 x=1 y=2 在相加;依次相加赋值累加;

    print(res)

    23.float() 浮点数

    24.format() 字符串格式化

    25.frozenset() 不可变集合;a = frozenset([1,2,3,4,5,4,3,2])

    26.getattr()

    27.globals() 返回当前整个文件的内容 以key value形式显示;print(globals())

    用于查看变量当前存在不存在

    28.hasattr()

    29.hash()   利用折半查找;非常高效;

    例如:

    有一个信息表:

    张三 12 男

    李四 13 女

    hash会把上边的表对应生成一个对应关系:

    1   张三 。。。

    2   李四 。。。

    然后再将1 2 3 4 生成一个有序的列表;

    当要查找张三的时候:

    hash利用折半查找法 查找张三对应的序号;

    30.help()   帮助

    31.hex()    把一个数字转成十六进制

    32.id() 返回内存地址

    33.input() 输入

    34.int()   把一个数字转成一个整形

    35.isinstance()

    36.issubclass() 是否是一个子类

    37.iter() 转换成一个迭代器

    38.len() 查看宽度

    39.locals() 打印内部变量

    def test():

    local_var =333

    print(locals())

    test()

    40.max() 返回列表里边最大值

    41.memoryview()

    42.min() 返回列表里边最小值

    43.next() 相当于迭代器里边的__next__()

    44.object  对象;在python里边一切皆对象;

    45.oct()  转八进制 oct(8)  ;逢八进一

    46.open()

    47.pow() 返回第一个参数的第二个参数次方;pow(2,4) 返回2的4次方

    48.print()

    49.property

    50.range()

    51.repr() 用字符串表示一个对象,但是转不回去。

    52.reversed() 反转

    53.round() 设置保留余数位数;round(1.222.2) 输出:1.22

    54.set() 集合

    55.setattr()

    56.slice() 切片

    57.sorted() 排序

    a = {6:2,8:0,1:4,-5:1,99:22}

    print(sorted(a.items()))    #key 按顺序排序

    print(sorted(a.items(),key=lambda x:x[1]))  #value 按顺序排序

    print(a)

    58.staticmethod()

    59.str()

    60.sum() 列表求和

    61.super() 面向对象里边的继承概念

    62.tuple()

    63.type() 查看数据类型

    64.vars() 返回一个对象的所有属性名

    65.zip() 把数据对应拼一块

    a = [1,2,3]

    b = ["a","b","c"]

    for i in zip(a,b):

    print(i)

    输出:

    (1, 'a')

    (2, 'b')

    (3, 'c')

    如果a=[1,2,3,4,5,6] 按照最小的数据列表显示,也就不显示456;

    66.__import__  直接导入模块里边的字符串,在不知道模块名字的情况下;

    __import__("abcd")

    展开全文
  • hive函数大全(中文版)

    热门讨论 2012-05-02 14:19:58
    14. 二进制函数: bin 14 15. 十六进制函数: hex 15 16. 反转十六进制函数: unhex 15 17. 进制转换函数: conv 15 18. 绝对值函数: abs 16 19. 正取余函数: pmod 16 20. 正弦函数: sin 16 21. 正弦函数: asin 16 22....
  • 随便看一段IDA的汇编:    C++编译器用于区分重载函数的机制。为了给重载函数生成唯一的名称,编译器用其他字符来修饰函数名称 图左就是C++的后缀命名法,图右是...如果一个二进制文件使用了后缀命名,IDA的

    随便看一段IDA的反汇编: 
    这里写图片描述 
    C++编译器用于区分重载函数的机制。为了给重载函数生成唯一的名称,编译器用其他字符来修饰函数名称

    图左就是C++的后缀命名法,图右是正常的函数名字

    为了显示正常的函数名字,使用Options▶Demangled Names 
    这里写图片描述

    比如,我们选中Names,反汇编将显示为: 
    这里写图片描述

    如果一个二进制文件使用了后缀命名,IDA的取消改编功能会立即展示函数的参数类型和返回类型。相反,如果函数并未使用后缀命名,你必须花费大量时间分析,从而确定函数的签名。 
    当然,一般的C++都是后缀命名,所以在切换成Names后,我们能立即看到operator new(int)这样的完整定义

    展开全文
  • EXCEL函数功能整理版

    2010-05-30 15:56:24
    26 BIN2DEC 这个函数二进制数转换为十进制数。负数用二进制数补码表示 27 CHAR 返回对应于数字代码的字符。函数 CHAR 可将其他类型计算机文件中的代码转换为字符。 28 CLEAN 删除文本中不能打印的...
  • 说明——(一二反,三再。) 第一步:子程序指针,选择语法,按下汇编。 第步:找到汇编代码(子程序封装)中的首个“call XXXXXXXX”,这是子程序的实际地址。 第三步:再次按下汇编,如果在...
  • 易语言本土化模块V2.20源代码 系统结构:十进制,表达式计算,二分查找,十进制转换为二进制,函数计算,括号计算,内部计算,圆周率,求正弦,求余弦,象素到厘米,厘米到象素,求直线距
  • 函数作用:十进制转二进制...........................90 '80.函数作用:检查一个数组是否为空.....................90 '81.函数作用:字母栏名转数字栏名.......................91 '82.函数作用:数字栏名转文字栏名.....
  • 编译是软件逆向分析的重要手段之一,是将由编译产生的二进制代码转换成与之逻 辑和功能等价的高级代码形式,在代码移植、软件理解与维护等方面具有重要作用。随着 互联网软件的飞速增长,编译在保障软件可用性及...
  • 476. Number Complement

    2017-02-26 14:47:08
    我的策略是先利用除2余法将所给正整数的二进制编码存放在一个字符串变量中,然后对该字符串进行遍历,采用二进制转十进制的方法将其转换为一个十进制数。需要注意的是代码中用到了求x的y次方的函数pox(x,y). ...

    Problem:


    Solution:

    题目要求将给定整数的二进制码变反后,输出新的二进制码所代表的整数。
    我的策略是先利用除2取余法将所给正整数的二进制编码存放在一个字符串变量中,然后对该字符串进行遍历,采用二进制转十进制的方法将其转换为一个十进制数。需要注意的是代码中用到了求x的y次方的函数pox(x,y).
    class Solution {
    public:
        int findComplement(int num) {
            string ss;
            int temp;
            int len;
            int sum = 0;
            while (num != 0)
            {
                temp = num % 2;
                num = num/2;
                ss = to_string(temp)+ ss;
            }
            len = ss.size();
            for (int i =0;i < len;i++)
            {
                if (ss[i] == '0') sum += pow(2,len-i-1);
            }
            return sum;
        }
    };
    当然这道题直接用移位操作解起来会更简洁,不知道那些大神是怎么想出来的,现阶段我的水平看得懂,但要让我独自写出来感觉好难,还是用自己理解的了的这种笨办法吧。。再接再厉微笑

    展开全文
  • oracle函数大全.doc

    2009-09-16 09:04:37
    将一个二进制构成的字符串转换为十六进制 46.ROWIDTOCHAR 将ROWID数据类型转换为字符类型 47.TO_CHAR(date,'format') SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY -----...
  • SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE --------- --------- --------- --------- ...
  • 79.十进制转二进制 80.检查一个数组是否为空 81.字母栏名转数字栏名 82.数字栏名转文字栏名 83.判断一件活页夹中是否还有子目录 84.判断一个文件是否在使用中 85.列出档案详细摘要信息 86.获取菜单ID编号及名称列表 ...
  • 本书侧重于函数的实战应用,共分12章,前10章分别介绍了数学函数、统计函数、日期和时间函数、文本函数、逻辑函数、查找和引用函数、财务函数、信息函数以及数据库和三角函数在实战中的应用;第11 章介绍了函数与...
  • c/c++math.h标准库

    千次阅读 2018-03-17 13:53:51
     abs -- 绝对值acos -- 余弦acosh -- 双曲余弦asin -- 正弦asinh -- 双曲正弦atan2 -- 两个参数的反正切atan -- 反正切atanh -- 双曲正切base_convert -- 在任意进制之间转换数字bindec -- 二进制转换为...
  • Numpy 为运算

    2019-04-30 14:10:00
    Numpy “bitwise_” 开头的函数是位运算函数: Numpy 位运算包括以下几个函数函数 描述 bitwise_and 对数组元素执行位与操作 ...按位反取 ...向左移动二进制表示的位 right_shift 向右移...
  • 个参数是基数即进制,默认为10。 所以实际上<code>parseInt(3.75)这个代码,会先将3.75转为字符串<code>"3.75"</code>,然后再将它<code>parseInt成为3。 所以用parseInt方法整数&#...
  • 遗传算法及其仿真.PDF

    2010-07-05 08:52:22
    SGA采用二进制编码,染色体就是二进制位串,每一位可称为一个基因;如果直接生成二进制初始种群,则不必有编码过程,但要求解码时将染色体解码到问题可行域内。 遗传算法模拟“适者生存,优胜劣汰”的进化机制,...
  • 一般游戏的存档,即数据的持久化...方案一:是把数据直接利用C#语言自带的序列化库库函数 system.serialize 做二进制格式的存取 方案二:Jason格式 方案三:protoBuff/ flatBuffer 这里是C#自带序列化函数的方案: ...
  • ~(二进制反码) *(取消指针引用) +(一元加) -(一元求) ++(递增) –(递减) 转换运算符 后缀递增和递减运算符(++ 和 ––)在递增和递减中单独处理,下面会讲到。 以下规则适用于所有其他一元...
  • C语言讲义.doc

    2018-01-27 10:41:43
    2.3 二进制数、位、字节与字 20 2.4 八进制 20 2.5 十六进制 20 2.6 原码 21 2.7 反码 21 2.8 补码 21 2.9 SIZEOF关键字 22 2.10 INT类型 22 2.10.1 int常量,变量 22 2.10.2 printf输出int值 23 2.10.3 printf输出...
  • 5.显示屏数字可随时转换为十六进制、十进制、八进制、二进制形式进行计算,以上各种转换与计算结果可选择是否自动存入WINDOWS剪贴板,并可自动输出在其它程序窗口的当前光标位置,省去了按”Ctrl+V”的不便。...
  • pickle 学习

    千次阅读 2011-05-22 20:38:00
    Python提供一个标准的模块,称为pickle 。使用它你可以在一个文件中储存基本上所有的 ...protocol的值还可以是1或2,表示以二进制的形式序列化。 pickle.load(file) 序列化对象。将文件中的数
  • SuperNotepad

    2012-11-14 11:23:53
    二进制正/负数均采用补码表示.如十进制负数-8的 二进制1000应为11000(也可表示为1000,在本软件 中当二进制第一位为1时可省略符号位);十进制正 数8的二进制1000应为01000(符号位不能省)) 08) 多种替换|转换...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

二进制取反函数