小编Jes*_*ess的帖子

std :: decimal :: decimal64正确用法,g ++ 4.6.3

我正在考虑用g ++的std :: decimal :: decimal32/64/128类型替换我们代码中的双打,以达到货币数量和价格的目的,但是我已经陷入了如何最好地输入和输出数据.具体来说,似乎没有任何用于转换为字符串/从字符串转换的例程,并且字符串流机制不会针对这些类型进行编译.我认为这样做的唯一方法是使用double作为中间类型,但是如果我们总是通过双精度输入和输出,这肯定至少部分地违背了使用小数类型的目的?

我确定我不会在这里理解一些东西,所以欢迎一些关于如何最好地使用这些类型的反馈.

编辑:

我已经将几个输入/输出程序一起攻击了,但是我对它们都不满意.输入几乎不稳健(没有科学记数支持),输出程序简单,更不用说由于双重转换而导致效率低下.

#define MAX_DEC_LEN 17

std::decimal::decimal64 FromString(const char* str)
{
    if (strlen(str) > MAX_DEC_LEN)
        throw std::runtime_error("bad input");
    char buf[MAX_DEC_LEN+1];
    strncpy(buf, str, MAX_DEC_LEN+1);
    char* point(NULL); 
    if ((point = strchr(buf, '.')) != NULL)
        *(point++) = '\0';
    std::decimal::decimal64 ret(atoi(buf));
    if (point != NULL && *point != '\0')
    {
        int exponent(strlen(point));
        long long unsigned coeff(atoi(point));
        std::decimal::decimal64 d2(std::decimal::make_decimal64(coeff, -exponent));
        if (*buf == '-')
            ret -= d2;
        else
            ret += d2;
    }
    return ret;    
}

std::string ToString(std::decimal::decimal64 dec)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ g++ decimal

11
推荐指数
1
解决办法
4558
查看次数

如何更改非打包应用程序崩溃的apport默认行为?

我们有一个部署了启用apport的Ubuntu服务器,如图所示.

~$ cat /proc/sys/kernel/core_pattern 
|/usr/share/apport/apport %p %s %c
Run Code Online (Sandbox Code Playgroud)

不幸的是,apport处理非打包应用程序崩溃的行为并不完全符合我们的喜好.apport在这些场景中的工作目录中生成"核心"文件(假设ulimit -c已正确设置).例如,从apport日志中,

ERROR: apport (pid 10117) Tue Jan  8 08:56:25 2013: executable: /home/jess/a.out (command line "./a.out")
ERROR: apport (pid 10117) Tue Jan  8 08:56:25 2013: executable does not belong to a package, ignoring
ERROR: apport (pid 10117) Tue Jan  8 08:56:25 2013: writing core dump to /home/jess/core (limit: 18889465931478580853760)
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是,一旦核心文件存在,它就不会被覆盖.因此,例如,如果我们正在测试应用程序并忘记从工作目录中清除旧的核心文件,那么应用程序在测试期间崩溃,我们将看不到新的核心文件.即使它被覆盖了,这可能也不理想,因为我们失去了旧核心.

理想情况下,我们希望能够通过参数告诉apport,对于非打包的应用程序,生成一个核心文件,其文件名根据指定的模式进行格式化(根据core_pattern文件规范). ..有没有办法做到这一点,或等同的东西?

ubuntu coredump crash-dumps

9
推荐指数
2
解决办法
4795
查看次数

使用 fp-tsequenceT 时如何“拓宽”阅读器类型?

我想知道使用sequenceT 时是否可以“拓宽”我的最终Reader 类型?当使用 chainW 等顺序链接操作时,这是可能的,但看起来在使用 sequenceT 时,您会遇到每个项目都必须使用相同的 Reader 类型的问题。我想这样做,以便我能够在适当的情况下并行执行某些任务,但仍然能够通过 Reader 使用依赖项注入。

例子:

import { sequenceT } from 'fp-ts/lib/Apply'
import { log } from 'fp-ts/lib/Console'
import { pipe } from 'fp-ts/lib/function'
import * as RT from 'fp-ts/ReaderTask'

interface Person {
  name: string
}

const getMe = (name: string) => (deps: { api: any }) => async (): Promise<Person> => {
  const person = {
    name,
  }
  return person
}

const getMum = (child: Person) => (deps: { api2: any }) => …
Run Code Online (Sandbox Code Playgroud)

functional-programming typescript fp-ts

4
推荐指数
1
解决办法
737
查看次数