代码审核之限制参数范围

这两天又看到一个历史遗留下来写得很糟糕的代码. 这个代码大概是求两条线的夹角. 发现这代码是因为有一个单元测试不通过, DEBUG进来 发现是因为 Acos 函数在输入参数大于 1的时候返回 Nan, 浮点运算有误差返回了类似 1.00000012 之类的大于1但是却很靠近1的数值. 比如JS里: 最后面的解决方法是: Math.acos(Math.max(Math.min(1, x), -1)); 通过这种方法把参数强制规定在-1到1期间. 但是这样的代码并不优美. 如果精度要求更严格, 可以自定义一个数值类型的类, 分开用整数来保存整数部分和小数部分, 这样需要定义加减乘除的运算, 但是由于整数部分参加运算没有精度损失, 所以不会有这样的问题. 不过得小心处理像进位这样的问题. 通过这种方法把参数强制规定在-1到1期间. 但是这样的代码并不优美. 如果精度要求更严格, …

节流~开源~投资

有这么一句话:富人的钱是省出来的.我并不是完全赞同,原因很简单,穷人再怎么省也富不了.每个月挣个几千块钱,你在北上广深试试,永远改变不了阶级. 我小时候的邻居,特别的省:衣服补了补又继续穿,晚上能不开灯就不开灯.十几年过去了,家里还是一贫如洗.孩子也无所事事. 不铺张浪费绝对是要提倡的,但是绝对不要指望节省来希望自己咸鱼大翻身.这里其实只做了一半,最为重要的是拿着省下来的钱来投资自己或者投资孩子. 有的人(排除富二代官二代)天性较为浪费:剩饭过夜就倒,衣服破了就扔,但日子越过越好.究其原因,他们愿意花钱投资自己改善环境为孩子提供更好的成长环境从而挣更多的钱,良性循环. 我之前是很不愿意(几乎没)买过书的,因为我觉得书上的知识在网上都能搜得到,为什么要花钱买?但是至从我买了书,天天花些时间(哪怕10分钟)看个几页,坚持几天下来,受益匪浅.为自己(孩子)投资绝对不会错.我小时候家庭环境并不好,但唯一父母绝对会给我和我姐买的就是学习所需的材料:书.高中的时候很多同学上晚自习的时候都用随身听听音乐,我也想要.于是我和我妈说这随身听是用来学英语的.妈妈二话不说便给了我400人民币让我自己去挑.这事我后来一直很惭愧,因为随身听买来就没有用来听过英语磁带. 开源,尽可能多条腿走路.收入来源广,业余时间多做些项目挣点外快没坏处.总收入提高了,你甚至都不需要花时间纠结于如何省这个省那个.日子还越过越顺心.如果你的精力有限,把时间花在如何提升自己的能力,进而更能开源.节流永远都不应该是你生活的主旋律. 本文一共 579 个汉字, 你数一下对不对. 节流~开源~投资. (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈

出租些SP 当一回债主 – 怎么样把你多余的SP租出去收点利息?

上回说到: 第一次打肿脸充胖子 – 花了200STEEM租1万SP四周! 花了200个STEEM租了1万个SP,为期4周(28天),那么平均每天花费 7.14 个STEEM.租的第三天,@minnowbooster 就涨价了,费用从200涨到266.67,于是我在想,是否能把这1万个SP再租回去,如果可以,立马净赚66.6 个STEEM,有木有? 为了更加理解这个买卖市场,我到了 @minnowbooster 官网: https://www.minnowbooster.net/ 然后点到 Open Requests, 这里列出的就是想借SP的用户,和付的费用,需要注意的是平台收取 10%的费用,所以要看你实际上收益是 Effective Price 那栏的钱数.看上满意了就可以点 Fill this Offer. 我找了一个想租225个SP的,租期为4周,那么一共他需要付的费用是6 个STEEM,平台收取债主10%,债主实际收益是5.4 个 STEEM,分配到每天就是 0.192 …

性能评估软件说我写了几行无用的代码

在代码出现性能瓶颈的时候,我们通常使用性能评估软件也就是Profiler 来查看代码中到底是哪几行,或者哪几个模块比较耗资源(速度慢或者占内存). 最近我就用 Profiler 跑了一下,发现我写了几处无用的代码.具体如下: 每行代码左边那个数字是被调用的次数,中间是执行时间(毫秒),右边是子函数的执行时间.我红色标出来的执行次数都是 1498179,而在进入这个函数的前几行都是在判断,如果条件不符合就立马退出函数,避免继续往下执行而导致程序崩溃(数组访问越界等). 但是明显来说,这几行代码都没有起作用.删掉这几行代码能省下2-3秒的执行时间.其实这种编程风格是 “Defensive Programming” 也就是处处加些判断(比如判断对像是否为 null)而不让程序崩溃.但实际上并不推荐,因为最好是一遇到错误就立即抛出异常,这样可以让我们更早的知道潜在的问题,而不是隐藏错误. 英文: The profiler told me I wrote some useless code (An Example of Defensive Programming) 本文一共 305 …

步子迈太大容易扯到蛋

人的一生就和升级一样,不断的提升自己.和比你厉害的人在一起能加快你的升级进度,因为就像STEEM一样,大鱼们时不时鼓励你一下,拉你一把,一下子等级就上去了,这远比你整天和狐朋狗友在一起效果要好得多. 可以简单的理解成人以群分,你整天和混得比你差在一起,很容易固步自封,时不时就很有优越感,没法进步.这是很可怕的.那天朋友说,其实我的情况已经比大多数英国人好了.很多英国人40多岁,项目经理,年薪甚至还不到40K.我很震惊,要是换我,都养不起家了. 当然每人情况不一样.但这却提醒我了:人要是不进步,选择会越来越少.习惯了每天悠闲的日子,每天调调程序,但自己 清楚,不进则退,这样实在是在浪费时间.于是挑灯夜读,每天进步一点点. 这几天有过一些思考,自己慢慢清楚了自己想要啥,大象不能一口吃完,步子迈太大容易扯到蛋.一旦决定了就不要再回头. 来,一起喝完这碗没有肉的鸡汤,共勉. 本文一共 332 个汉字, 你数一下对不对. 步子迈太大容易扯到蛋. (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈

SteemIt 通过回溯算法确定更好的点赞策略 (高级版)

上回说到点赞策略,但我们并不确定是否有更好的投票策略,或者说,已经有的几种方法已经是相当好的了.我们来回顾一下: 第一种方法:不管三七二十一,直接最开始一并点完. 第二种方法:在睡觉前点完(等SP能量恢复到最大值). 第三种方法:每次点赞间隔等时间来点. 我们通过Javascript程序模拟出收益情况发现:如果起始能量很接近格满,比如大于90%,那么选着第三种方式,否则选第二种. 那么我们这篇帖子需要看看能否搜索出最大收益的点赞方法. 由于点赞方式的搜索空间较大,所以我们缩小一下范围.我们假设:一天点4次(T=4),在N=4 小时内点完.M还是270美元(100%能量点赞的收益) 我们先定义一个点赞方案的数组, 值表示为离时间段开始的分钟偏移: var sol = Array(); for (var i = 0; i < T; ++ i) { sol = 0; } …