从tibuko,看离散数学思维,和计算机思维

兄贵
楼主 (文学城)

tibuko经常敲三打四,基本上都是无的放矢,从计算M2供应量到点评计算机,大炮放了不少,可惜没一个不打偏的,

刚刚上网,看到 替补裤 抛了个绣球:

都是CS牛人,写个sin函数怎么搞?   来源: tibuko 于 2022-12-08 11:17:20 [档案] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 1031 次 (0 bytes)

• 不管你怎么算,sin是有定义的,算得比这麻烦,那肯定不对 -avw   (0 bytes) (2 reads) 12/08/2022 postreply 11:35:36

• 非CS硬核,鉴定完毕 -tibuko    (0 bytes) (1 reads) 12/08/2022 postreply 11:38:01

• 取决于performance和memory之间的tradeoff -兄贵    (578 bytes) (13 reads) 12/08/2022 postreply 14:05:16

• 不错,你已经有cos了,还导数个啥? -tibuko    (0 bytes) (3 reads) 12/08/2022 postreply 15:12:02

• Cos 不是精确值,是迭代值。跟你没法谈了 -兄贵    (0 bytes) (1 reads) 12/08/2022 postreply 15:30:13

• Recursion 听说过没? 有了和更有了,不是一回事 -兄贵    (0 bytes) (0 reads) 12/08/2022 postreply 15:32:59

我接了一下:

取决于performance和memory之间的tradeoff -兄贵

如果是考虑memory,用最快收敛级数,比如构造一个比泰勒级数更快收敛的级数

如果是考虑performance, 用bucket / bigtable 装下所有精度要求的sine值调用

两者相结合,可以产生很多整合方法,比如 (1)级数展开不是在0点,而是在 bucket中的最接近的值附近,(2)因为sin的微分是cos,所以进行 slope iteration,通过sin,cos的迭代计算,快速算出;(3)可以用 spline 方法,(4)Smoothstep 方法,以及 Cordic 方法,,,等等

替补裤兄回答:

你已经有cos了,还导数个啥? -tibuko

这里发现 替兄 确实没有 离散数学思维和计算机思维,而是初等代数思维。没学过离散数学的,一听替兄所言 极是,都有cos值了,还算什么sin呢?

离散数学有一个方法就是 induction,这是functional programming的基础,recursive方法的基础。这里计算sin,只是通过cos来逼近,因为 sin,cos 互为导数,下面是我写的计算的code,相对简单,而且收敛非常好,大家可以试试,看能不能计算出你要的sin值:

float sin_at_x(float x) {     const float step = 0.000001; //这个可以调精度       float a = 0.0;     float cos = 1.0;     float sin = 0.0;       while(a<x) {         sin += cos * step;;         cos -= sin * step;         a += step;     }     return sin; }   上面是用C++写的草稿,下面是用Python test 结果,非常快,非常准:     这个例子,说明 离散数学和 functional programming真的很重要
寂寞的烟花
兄贵,你太好玩了,太执着了,手工为你点赞。
a
avw
哈哈,替补裤
青裁
哈哈, 他前不久被海伦妈削得收敛了几天、今天你又补刀 lol
兄贵
别欺负我英文不好啊
兄贵
谢谢
a
avw
你是准点贡献好文啊
兄贵
哈哈,海伦妈是高山仰止,出口皆诗
t
tibuko
呵呵,还搞人身攻击了,厉害,这个不叫收敛也没搞明白,也不是什么函数编程,好吧,你们都是专家,紫檀就是您这样的多

兄贵
哪里人身攻击了?指出来 我改
1
12度圆缺
贵兄,牛人一个!
t
tibuko
人身攻击不用改了,你们都一样,呵呵,水平太低,这程序赶紧擦掉,本来我觉得你说得挺专业的,结果贴出这么个吓人的东西

留着吓人不好吧。

兄贵
没学过计算机,纯粹退休后爱好
兄贵
交流么,也就是过招,难免伤到,欢迎来一刀,继续探讨啊,别动不动生气啊
寂寞的烟花
也为你点赞,敢挑战子坛权威。
兄贵
说一下啊,什么地方被吓到了?
y
yddad
你是做研究的料,现在在这里混的如鱼得水也属于跑偏:-D
t
tibuko
问一下CMU教授吧,我们没水平修改
兄贵
果酱果酱,被本坛踢出研究圈几次了
兄贵
因为没有及时更换输入法的原因,不是人身攻击啊
清水港
太深奥了!
a
avw
替补兄也来一段高级的
总要注册
请问 兄贵, 你的Code里用了递归了? 你这儿讨论的与其说是CS, 不如说是Math。
兄贵
不算递归,但是和递归一样,属于 induction
静听秋雨
赞钻研能力和认真精神,在此坛傲视群雄!冉冉上升的新星。
兄贵
这个Code,也可以写成 递归的形式,分sin和cos两个递归函数即可
M
Midwestrural
哈哈,还是楼主认真执着,替补哥有了麻烦。。。
总要注册
那它的算法复杂性是: O(?) ?
兄贵
刚开始向大家请教学习。上坛太晚了,不然小孩也能弄根藤爬爬
静听秋雨
你家公子爬不爬藤其实意义不大。珍视自己拥有的就是最好的,前景一样光明。
a
avw
藤校肯定不欢迎你们这种的,让学霸下不了台了
O
O妈
兄贵,印象中,你家娃一个学期选大概五门CS课,会不会后面没有感兴趣的可以选的?
a
avw
他儿子两年就能毕业了
兄贵
当然是 O(n)
O
O妈
能毕业不等于想毕业。
兄贵
不会,计划读3年半或者4年。准备选2个minor,和 2-3个concentrations. 估计得4年
a
avw
不如早点毕业,加两年PhD都读完了。PhD期间很空的,随便修课
t
trivial
And how does n related to the input x?
O
O妈
有些大学修的课满足条件,可以under和master学位一起拿,虽然CS硕士没太大用处。
兄贵
谢谢建议,我传达一下
兄贵
谢谢,是的。小孩特别想拿两个minor,可能不够时间拿 master
兄贵
n 等于 x 除以 step
O
O妈
CMU的规定是什么?
w
whaled
好主意,有深度的课都在专业课上。扎实的利用四年建立自己的Breath。我觉得不用急着读研,那样定型太早。
徽州老家
赞你认真严谨!
静听秋雨
4年半一起拿CS本科和Master。

前同事的儿子就是在CMU这样读的。

兄贵
CMU有 4+1项目,加一年拿硕士
兄贵
谢谢,你们是前辈 加 学长
O
O妈
那就算了。我们不需要加多年份,可以四年或者更短的时间搞定,就是看学分和成绩。
兄贵
我小孩现在还对学习比较感兴趣,特别是游戏类的课程,等着上呢
兄贵
谢谢指点,我转告小孩
兄贵
谢谢,大家都是闹着玩
兄贵
谢谢
i
ilovepotato
不明觉厉!
静听秋雨
那个孩子假期还给公司做项目,挣外快。现在加州工作了。
t
trivial
再问个问题行吗?

我不太懂CS, 也没太明白这个这个algorithm, 有点像用线性不断逼近的。 我的问题是,考虑到sin, cos 都是periodic function, 只需要计算x 在0 到2pi 之间的值。所以你这个程序是 O(1)的?  

 

w
whaled
是考虑Computer Graphics minor?Game prog课,对将做VR tool和科研有帮助。

Game design就偏设计了。娃要是游戏迷想开发游戏倒是也不错。

宝马奔驰
兄贵啊,突发奇想

兄贵是不是库珀的学生啊?

兄贵
非常对,我只是随手写一下,有许多可以优化的
大西洋里来的人
从娃们的学校较劲,已经升级到父母直接上了,呵呵。咱不能批评那些中学球场打架的家长了