是否有任何 C# 规范说明了整数类型项(例如,int)到项的隐式转换double应该如何工作?如果是这样,有人可以告诉我算法或指导我吗?
C# 6.0 草案规范在词法结构 -> 语法 -> 词法语法 -> 词法分析 -> 令牌 -> 文字下声明“float 或 double 类型的实数的值是通过使用 IEEE '舍入到最近'模式确定的” -> 真正的文字;但是我无法找到有关隐式转换如何工作的任何信息。
我在同一规范中的转换 -> 隐式转换 -> 隐式数字转换下找到的唯一内容是“从int, uint, long, 或ulongtofloat和 fromlong或ulongto 的转换double可能会导致精度损失,但永远不会导致幅度损失。”
我确实知道隐式转换不遵循与真实文字相同的算法,如下面的程序所示*:
using System;
using System.Diagnostics;
namespace App
{
internal static class Program
{
internal static void Main()
{
Debug.Assert(GetFirstByte(10648738977740919977) != GetFirstByte(10648738977740919977d));
}
private static …Run Code Online (Sandbox Code Playgroud) 我已经学习Haskell几周了,我对使用underscore(_)作为函数参数有疑问.我想用一个具体的例子可以更好地问我的问题.假设我想定义一个函数,它根据提供的索引提取列表元素 - 是的,我意识到(!!)已经预先定义了.我可以定义函数的两种方式(我确定还有更多)如下:
版本1
indexedElement :: [a] -> Int -> a
indexedElement xs n | n < 0 = error "Index can not be negative."
indexedElement [] n = error "Index must be smaller than the length of the list."
indexedElement (x:xs) 0 = x
indexedElement (x:xs) n = indexedElement xs (n - 1)
Run Code Online (Sandbox Code Playgroud)
版本2
indexedElement :: [a] -> Int -> a
indexedElement _ n | n < 0 = error "Index can not be negative." …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何迭代任意数量的循环,其中每个循环取决于最近的外循环。以下代码是我想要执行的操作的示例:
def function(z):
n = int(log(z))
tupes = []
for i_1 in range(1, n):
for i_2 in range(1, i_1):
...
...
...
for i_n in range(1, i_{n - 1}):
if i_1*i_2*...*i_n > z:
tupes.append((i_1, i_2,..., i_n))
return tupes
Run Code Online (Sandbox Code Playgroud)
虽然我希望它适用于任何z> e**2,但它足以适用于zs 至e**100。我知道,如果我采用适当的 s 的笛卡尔积range,我最终会得到我想要的元组的超集,但我只想获得我想要的元组。
如果有人能帮助我解决这个问题,我将不胜感激。提前致谢。